使用 sync.WaitGroup 可以实现 Goroutine 的计数器同步。具体实现步骤如下:
- 1、创建一个 WaitGroup 对象 wg。
- 2、在每个需要等待的 Goroutine 中,使用 wg.Add(1) 将计数器加一。
- 3、在每个 Goroutine 的末尾,使用 wg.Done() 将计数器减一。
- 4、在需要等待所有 Goroutine 执行完成的位置,使用 wg.Wait() 阻塞等待计数器归零。
示例代码如下:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func(i int) {
fmt.Printf("Goroutine %d is running...\n", i)
wg.Done()
}(i)
}
wg.Wait()
fmt.Println("All Goroutines finished!")
}
在上面的示例中,使用了 sync.WaitGroup 对象 wg 来进行计数器同步,使用 wg.Add(1) 将计数器加一,使用 wg.Done() 将计数器减一。在 main 函数中使用 wg.Wait() 阻塞等待所有 Goroutine 执行完成。