golang 基础(22)WaitGroup

作者: zidea | 来源:发表于2019-03-29 19:55 被阅读3次
square-gopher.png

waitGroup 从字面上来看是等待组,好处是主线程的退出或执行需要其之前所有 goroutine 执行完毕才回到主线程执行,这是保证所有的 goroutine 都会被执行到

···

import (
    "fmt"
    "time"
    "sync"
)

func doSomething(millisecs time.Duration, wg *sync.WaitGroup){
    duration := millisecs * time.Millisecond
    time.Sleep(duration)
    fmt.Println("Function in background, duration:", duration)
    wg.Done()
}

func main(){
    var wg sync.WaitGroup
    wg.Add(4)
    go doSomething(200, &wg)
    go doSomething(400, &wg)
    go doSomething(150, &wg)
    go doSomething(600, &wg)

    wg.Wait()
    fmt.Println("Done")
}

为发生我们添加多余 wg 造成 deadlock 好的的喜欢写一个 goroutine 就 Add 一次。

func main(){
    var wg sync.WaitGroup
    wg.Add(1)
    go dosomething(200, &wg)
    wg.Add(1)
    go dosomething(400, &wg)
    wg.Add(1)
    go dosomething(150, &wg)
    wg.Add(1)
    go dosomething(600, &wg)

    wg.Wait()
    fmt.Println("Done")
}
Function in background, duration: 150ms
Function in background, duration: 200ms
Function in background, duration: 400ms
Function in background, duration: 600ms
Done

如果我们 wg.Add 数量超出了现有 goroutine 个数就会发生 deadlock! 错误

wg.Add(5)
fatal error: all goroutines are asleep - deadlock!
gophercloud.png

相关文章

  • golang 基础(22)WaitGroup

    waitGroup 从字面上来看是等待组,好处是主线程的退出或执行需要其之前所有 goroutine 执行完毕才回...

  • golang 基础(30) WaitGroup

    golang中有2种方式同步程序,一种使用channel,另一种使用锁机制。sync.WaitGroup只有3个方...

  • golang sync WaitGroup

    刚才看golang的sync的包,看见一个很有用的功能。就是WaitGroup。 先说说WaitGroup的用途:...

  • golang语言异步通信之WaitGroup

    golang语言异步通信之WaitGroup 简介 WaitGroup的用途是使得主线程一直阻塞等待直到所有相关的...

  • (八)golang WaitGroup 源码分析

    1 前言 WaitGroup是Golang应用开发过程中经常使用的并发控制技术。WaitGroup,可理解为Wai...

  • Golang sync.WaitGroup基础用法

    程序输出如下,

  • golang sync WaitGroup

    简介 它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。...

  • Golang的WaitGroup陷阱

    sync.WaitGroup是并发环境中,一个相当常用的数据结构,用来等待所有协程的结束,在写代码的时候都是按着例...

  • golang积累-WaitGroup包装

    在看NSQ源码时看到封装了waitgroup方法,很实用,于是网上找了一篇文章,顺带整个流程熟悉一遍 golang...

  • golang 系列:waitgroup 解析

    摘要 Golang 提供了简洁的 go 关键字来让开发者更容易的进行并发编程,同时也提供了 WaitGroup 对...

网友评论

    本文标题:golang 基础(22)WaitGroup

    本文链接:https://www.haomeiwen.com/subject/pnklbqtx.html