sync.WaitGroup 是 Go 语言中的一个并发原语,用于等待一组协程完成任务。它提供了三个方法:
Add(delta int):添加 delta 个正在运行的协程数量。
Done():表示当前协程已经完成任务,可以调用该方法来减少正在运行的协程数量。
Wait():阻塞当前协程,直到所有协程完成任务。
下面是一个使用 sync.WaitGroup 的示例:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(n int) {
fmt.Println("Task", n, "start")
// 模拟任务执行
for j := 0; j < n*1000000000; j++ {
// do nothing
}
fmt.Println("Task", n, "done")
wg.Done()
}(i)
}
wg.Wait()
fmt.Println("All tasks done.")
}
在上面的代码中,我们创建了一个 WaitGroup 变量 wg,并向其中添加了五个正在运行的协程。每个协程都会执行一些任务,并在完成后调用 wg.Done() 来减少正在运行的协程数量。最后,我们调用 wg.Wait() 阻塞当前协程,直到所有协程完成任务。