Golang中的sync.WaitGroup是什么?
sync.WaitGroup
是 Go 语言中的一个同步原语,用于等待一组 goroutines 完成任务。sync.WaitGroup
提供了一个简单的方式来等待异步操作完成。
sync.WaitGroup
包含以下三个主要方法:
- Add(int):将
WaitGroup
计数器增加指定的值。通常在启动 goroutine 之前调用此方法。 -
Done():减少
WaitGroup
计数器。通常在 goroutine 完成任务后调用此方法。 -
Wait():阻塞调用,直到
WaitGroup
计数器归零。通常在主 goroutine 中调用此方法,等待其他 goroutine 完成任务。
下面是一个使用 sync.WaitGroup
的例子:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Worker %d starting\n", id)
time.Sleep(time.Second)
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go worker(i, &wg)
}
wg.Wait()
}
在这个例子中,我们创建了 5 个工作 goroutines ,每个 goroutine 完成工作后会调用 wg.Done()
来通知 WaitGroup
自己已完成任务。主 goroutine 通过调用 wg.Wait()
来等待所有的工作 goroutines 完成任务。
sync.WaitGroup
是实现并发同步的一个非常有用的工具,它简化了在多个 goroutines 完成操作之后进行协调的过程。