注意:下述所有图片中 - 号是BUG代码,+号是修复BUG的代码
1.死锁
goroutine1 ch发送者被阻塞住,无法释放锁
goroutine2 loop获取锁失败
2.goroutine永久泄露
context.WithCancel内部启动goroutine,在ctx被覆盖后goroutin永久泄露
3.waitgroup使用不当,永久阻塞
使用WaitGroup一定要遵守的原则就是,等所有的Add方法调用之后再调用Wait,否则就可能导致panic或者不期望的结果
注意:下述所有图片中 - 号是BUG代码,+号是修复BUG的代码
goroutine1 ch发送者被阻塞住,无法释放锁
goroutine2 loop获取锁失败
context.WithCancel内部启动goroutine,在ctx被覆盖后goroutin永久泄露
使用WaitGroup一定要遵守的原则就是,等所有的Add方法调用之后再调用Wait,否则就可能导致panic或者不期望的结果