WaitGroup是经常使用的同步阻塞等待对象。WaitGroup能够调度goroutinue。首先调用同步等待组的Add(num)其中num为正整数,num会添加到WaitGroup中的counter数据里, 而后再协程内部调用Done() ,Done() 方法调用的是Add(-1),counter值会减小,全部执行wg.Wait()的goroutinue在counter不等于0时都会被堵塞。等于0时那些goroutinue再也不阻塞
代码以下。下面的代码中有两个执行wg.Wait()的goroutinue。golang
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的调度。code