golang中sync.WaitGroup的使用 - Go语言中文社区

golang中sync.WaitGroup的使用


WaitGroup是常用的同步阻塞等待对象。WaitGroup可以调度goroutinue。首先调用同步等待组的Add(num)其中num为正整数,num会添加到WaitGroup中的counter数据里, 然后再协程内部调用Done() ,Done() 方法调用的是Add(-1),counter值会减少,所有执行wg.Wait()的goroutinue在counter不等于0时都会被堵塞。等于0时那些goroutinue不再阻塞
代码如下。下面的代码中有两个执行wg.Wait()的goroutinue。

func main() {
    var wg = sync.WaitGroup{}
    wg.Add(1)
    go func() {
        wg.Done()
    }()
    go func() {
        wg.Wait()
        fmt.Println("Hi1")
    }()
    wg.Wait()
    fmt.Println("Hi2")
}

但是因为goroutinue调度原因上面的代码的输出不唯一顺序和数量都可能不一样。具体原因可以查看golang中GMP的调度。

版权声明:本文来源Segmentfault,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://segmentfault.com/a/1190000039975723
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-13 19:52:49
  • 阅读 ( 1118 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢