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