深度揭秘Go语言sync.WaitGroup:并发控制的得力工具
在Go语言中,`sync.WaitGroup`是并发控制的一个工具,用于等待一组goroutine的结束。 `sync.WaitGroup`类型在`sync`包中定义,并且它主要有两个方法:`Add`和`Done`。 * `Add`方法用于向`WaitGroup`添加一个或多个等待的goroutine。如果传递的参数是负数,那么会引发运行时错误。通常,我们使用`Add`方法在启动goroutine之前向`WaitGroup`添加一个计数器。 * `Done`方法用于在`WaitGroup`中标记一个goroutine的结束。这个方法将减少`WaitGroup`的计数器。当计数器达到零时,表示所有的goroutine都已完成,此时可以安全地退出等待。 使用`sync.WaitGroup`的一个典型示例如下: ```go package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup numGoroutines := 5 wg.Add(numGoroutines) for i := 0; i < numGoroutines; i++ { go func(id int) { defer wg.Done() fmt.Printf("Goroutine %d started\n", id) time.Sleep(time.Second) fmt.Printf("Goroutine %d finished\n", id) }(i) } wg.Wait() fmt.Println("All goroutines have finished.") } ``` 在这个示例中,我们创建了一个`sync.WaitGroup`实例,并在启动每个goroutine之前使用`Add`方法将其计数器增加1。每个goroutine在结束时使用`Done`方法将计数器减少1。我们使用`Wait`方法等待所有的goroutine完成。当计数器达到零时,我们输出一条消息表示所有的goroutine都已经完成。 ######[AI写代码神器 | 446点数解答 | 2023-11-09 18:13:53]
- Python 实现句子反转:单词大小写转换与数字倒转(字节豆包 | 131点数解答 | 2024-11-11 16:44:49)421
- Python 实现句子单词逆序及大小写、数字转换,开发要点揭秘!(百度文心 | 451点数解答 | 2025-10-25 11:33:27)86
- C语言实现:句子反转,单词大小写与数字倒转处理(百度文心 | 1010点数解答 | 2025-10-25 11:34:26)115
- C语言实现句子反转:处理输入空格、内存管理与数字判断的要点(阿里通义 | 712点数解答 | 2025-10-25 11:35:19)90
- C++实现机关门数字判断程序,依据3的倍数规则输出结果(字节豆包 | 167点数解答 | 2026-03-14 20:35:32)28
- C++实现机关门数字判断程序,依据3的倍数决定操作(字节豆包 | 132点数解答 | 2026-03-14 20:36:37)22
- C 语言实现句子反转:单词大小写转换与数字倒转(字节豆包 | 393点数解答 | 2024-11-11 16:45:21)550
- SQL:[pr_createdtables]存储过程代码解析及表创建准备 (字节豆包 | 33点数解答 | 2024-08-29 15:34:33)355
- 深入剖析Go语言线程模型:m:n方案缘由与调度器核心元素揭秘(百度文心 | 637点数解答 | 2023-11-09 18:16:00)301
- Python 利用 Selenium 库实现查找并点击网页“go”按键的方法与示例(字节豆包 | 216点数解答 | 2024-11-21 17:00:58)284
- C++实现机关门数字判断:3的倍数输出“stop”,否则“go on”(字节豆包 | 111点数解答 | 2025-10-18 17:14:50)104
- Python实现按字典序输出去重单词(字节豆包 | 239点数解答 | 2026-02-23 21:15:24)18