理论上Wait的时候Add是可行的啊,Wait只需要关注当前数目是不是0就可以了啊
代码大致如下,是公司一个不成熟的框架,问题已经改掉了,现在想对这个原理探究一下
```
// 主逻辑
go Do()
<- a.close // a是一个channel定义在其他位置,发现异常就会close掉
// 此时Do内可能才执行到DoSomething_1(), 所以会导致Wait以后执行Add,这个时候就会panic
wg.Wait()
// Do函数定义如下
func Do() {
for {
select {
case <- a.close:
return
default:
DoSomething_0()
go func() {
DoSomething_1()
wg.Add(1)
go func() {
defer wg.Done()
DoSomething_2()
}()
DoSomething_3()
}()
}
}
}
```
#5
更多评论
比如有两个goroutine,第一个里面有wg.Wait(),第二个里面有wg.Add(1),Add()比Wait()晚一些运行 就会报错
![截图.png](https://static.studygolang.com/170928/ab02e4e94cab6ea6eb237cf7e12da317.png)
#2