关于golang:golang中syncWaitGroup的使用

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的调度。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理