社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
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的调度。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!