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