在 sync.WaitGroup(等待组)类型中,每个 sync.WaitGroup 值在内部维护着一个计数,此计数的初始默认值为零。
方法
方法名 | 功能 |
---|---|
(wg * WaitGroup) Add(delta int) | 等待组的计数器 delta |
(wg * WaitGroup) Done() | 等待组的计数器 -1 |
(wg * WaitGroup) Wait() | 当等待组计数器不等于 0 时阻塞直到变 0 |
使用示例
创建wg计数器:
代码语言:javascript复制var wg sync.WaitGroup
计数器加1:
代码语言:javascript复制wg.Add(1)
计数器减1:
代码语言:javascript复制wg.Done()
计数器等待:
代码语言:javascript复制wg.Wait()
完整示例
代码语言:javascript复制package main
import (
"fmt"
"sync"
)
func main() {
// 创建计数器
var wg sync.WaitGroup
// 并发任务
for i := 0; i < 10; i {
// 计数器 1
wg.Add(1)
go func(i int) {
// goroutine结束后计数器-1
defer wg.Done()
fmt.Println(i)
}(i)
}
// 计数器等待
wg.Wait()
fmt.Println("END")
}
当wg计数大于0时,wg.Wait()会使程序阻塞,直到计数为0时,才继续执行后面的代码。