当前位置: 首页 > news >正文

Go语言-->sync.WaitGroup 详细解释

sync.WaitGroup 详细解释

sync.WaitGroup 是 Go 语言中用于同步多个 goroutine 的完成的工具。它允许主 goroutine 等待所有子 goroutine 执行完毕后再继续。

核心概念

WaitGroup 内部维护一个计数器

  • Add(n): 计数器加 n(通常在启动 goroutine 前调用)
  • Done(): 计数器减 1(在 goroutine 完成时调用)
  • Wait(): 阻塞直到计数器变为 0

基本用法

package mainimport ("fmt""sync""time"
)func main() {var wg sync.WaitGroup// 添加 3 个 goroutine 到等待组wg.Add(3)// 启动第一个 goroutinego func() {defer wg.Done() // 完成时计数器 -1fmt.Println("任务 1 开始")time.Sleep(1 * time.Second)fmt.Println("任务 1 完成")}()// 启动第二个 goroutinego func() {defer wg.Done()fmt.Println("任务 2 开始")time.Sleep(2 * time.Second)fmt.Println("任务 2 完成")}()// 启动第三个 goroutinego func() {defer wg.Done()fmt.Println("任务 3 开始")time.Sleep(500 * time.Millisecond)fmt.Println("任务 3 完成")}()// 等待所有 goroutine 完成wg.Wait()fmt.Println("所有任务完成!")
}

输出

任务 1 开始
任务 2 开始
任务 3 开始
任务 3 完成
任务 1 完成
任务 2 完成
所有任务完成!

关键特性

方法说明
Add(n)计数器加 n,必须在启动 goroutine 前调用
Done()计数器减 1,通常用 defer 确保执行
Wait()阻塞直到计数器为 0

常见模式

1. 批量处理任务

var wg sync.WaitGroup
for i := 0; i < 10; i++ {wg.Add(1)go func(id int) {defer wg.Done()// 处理任务fmt.Printf("处理任务 %d\n", id)}(i)
}
wg.Wait()

注意事项

⚠️ 常见错误

  • Add() 调用晚于 goroutine 启动
  • 忘记调用 Done()
  • Wait() 前计数器已为 0

最佳实践

  • 使用 defer wg.Done() 确保执行
  • 在启动 goroutine 前调用 Add()
  • 避免在 goroutine 中调用 Add()
http://www.dtcms.com/a/540137.html

相关文章:

  • 从“造机器”到“造生态”:中国智能时代的系统跃迁——从宇树实训平台到视频神经系统的启示
  • YOLOV5_TensorRT_C++部署
  • 海南省住房和城乡建设官方网站网站域名不备案
  • 网络空间引擎
  • VANCHIP射频芯片:智能汽车的“第六感”觉醒
  • C++——二叉搜索树——数据结构进阶——附加超详细解析过程/代码实现
  • 网站页面两侧漂浮的怎样做电商网站前端页面内容编写
  • PCIE学习
  • API Key 管理与计费系统模块(API Gateway 模块)需求文档
  • 2024-2025年技术发展趋势深度分析:AI、前端与后端开发的革新之路
  • vue3 实现贪吃蛇 电脑版01
  • 做网站带后台多少钱东莞做网站 动点官网
  • 郑州做网站建设wordpress数据控查看密码
  • 数据采集-BeautifulSoup库
  • 帝国cms的阅读量增加的api接口示例
  • RDF 实例
  • 面向对象编程:继承从理论到实战
  • 43-基于STM32的医用护理床设计与实现
  • 【经济方向专题会议】第二届经济数据分析与人工智能国际学术会议 (EDAI 2025)
  • Auto CAD二次开发——折线多段线
  • django做的购物网站海口网站建设优化案例
  • 一个密码破解器
  • 如何查看网站的建设者重庆建设部网站官网
  • Ansible 的条件语句与循环详解
  • 生产级 Ansible 部署全流程-nginx示例
  • Ansible Playbook 深度解析:自动化任务编排最佳实践
  • Ansible生产调优与故障排查全攻略
  • 【笔记】Podman Desktop 部署 开源数字人 HeyGem.ai
  • vue-day02
  • 青岛有哪些做网站的公司公司网页制作需要什么哪些材料