介绍
并发任务的处理需要引入 sync.WaitGroup
核心方法
- Add(1)//计数器加1
- Done()//计数器-1
- Wait()//阻塞直到计数器为0
注意事项
- 计数器不能为负值
- WaitGroup对象不是一个引用类型
- WaitGroup对象不是一个引用类型,在通过函数传值的时候需要使用地址
func main() {
wg := sync.WaitGroup{}
wg.Add(100)
for i := 0; i < 100; i++ {
go f(i, &wg)
}
wg.Wait()
}
// 一定要通过指针传值,不然进程会进入死锁状态
func f(i int, wg *sync.WaitGroup) {
fmt.Println(i)
wg.Done()
}