WaitGroup
add與done只是用來統計數量的 done減爲0的時候就告訴wait結束
wait只是用來堵塞主函數的 當協程數爲0時候結束
有了它我們不用寫time.Sleep或者<-channelname了
package main
import (
"fmt"
"sync"
)
var waitgroup sync.WaitGroup
func Afunction(shownum int) {
fmt.Println(shownum)
waitgroup.Done() //任務完成,將任務隊列中的任務數量-1,其實.Done就是.Add(-1)
}
func main() {
for i := 0; i < 6; i++ {
waitgroup.Add(1) //每創建一個goroutine,就把任務隊列中任務的數量+1
go Afunction(i)
}
waitgroup.Wait() //.Wait()這裏會發生阻塞,直到隊列中所有的任務結束就會解除阻塞
}
// 5
// 3
// 2
// 0
// 1
// 4