Go sync.WaitGroup 怎么用?Add/Done/Wait 的正确姿势与注意事项
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
WaitGroup 等待一组 goroutine 完成:wg.Add(n) 计数、wg.Done() 减一(defer wg.Done())、wg.Wait() 阻塞到计数归零。注意事项:① Add 必须在 Wait 之前且与 goroutine 数一致;② 不要在 goroutine 内调用 Add(可能 Wait 已开始导致竞态);③ Done 要保证执行(defer);④ WaitGroup 不可复制(传指针);⑤ 计数不能为负(会 panic)。替代:errgroup 收集错误、channel 关闭信号。
回复
0 条回复