Go WaitGroup
WaitGroup用于等待一组线程的结束。父线程调用Add 方法来设定应等待的线程数量。每个被等待的线程在结束时应调用Done方法。
同时,主线程里可以调用wait方法阻塞至所有线程结束。
主要函数:
func (wg *WaitGroup) Add(delta int):等待协程的数量。
func (wg *WaitGroup) Done(): 减少waitgroup线程等待线程数量的值,一般在协程完成之后执行。
func (wg *WaitGroup) Wait():wait方法一般在主线程调用,阻塞直到group计数减少为0。
package main
import (
"fmt"
"sync"
"time"
)
func test(i int,g *sync.WaitGroup){
fmt.Println(i,"run....")
time.Sleep(time.Second)
fmt.Println(i,"done....")
g.Done()
}
func main() {
group := &sync.WaitGroup{}
group.Add(5)
for i := 0;i< 10;i++{
test(i,group)
}
group.Wait()
fmt.Println("main done...")
}
注意:Add和创建协程的数量一定要匹配,否则会产出panic

浙公网安备 33010602011771号