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