注意事项
1.计数器不能直接设置为负值
panic: sync: negative WaitGroup counter
goroutine 1 [running]:
sync.(*WaitGroup).Add(0xc042008230, 0xffffffffffffff9c)
D:/Go/src/sync/waitgroup.go:75 +0x1d0
main.main()
D:/code/go/src/test-src/2-Package/sync/waitgroup/main.go:10 +0x54
2.不能直接wait
要在wait之前调用add添加,否则直接退出
3.WaitGroup对象不是一个引用类型
WaitGroup对象不是一个引用类型,在通过函数传值的时候需要使用地址:
否则报错 panic: sync: negative WaitGroup counter
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()
}
3.不能在wait之后调用add
在调用wait之后不能在调用add,会直接
panic("sync: WaitGroup misuse: Add called concurrently with Wait")
多个人等待一个人干活
有疑问加站长微信联系(非本文作者)