Go 对于“等待全部多线程任务结束”的场景,有官方的解决方案--"sync.WaitGroup"
package main
func main(){
var wg sync.WaitGroup
for i:=0;i<10;i++{
wg.Add(1) // wg 中的计数器加1
go func(){
defer wg.Done() // wg 中的计数器减1
}()
}
wg.Wait() // 持续阻塞等待,直到 wg 中的计数器为0
}
创建协程时,使用defer wg.Done()
避免函数结束或者异常中止时没有调用Done()
操作,导致Wait()
一直阻塞,发生内存泄露。
有疑问加站长微信联系(非本文作者)