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

posted @ 2020-04-08 13:20  醉深梦始  阅读(579)  评论(0)    收藏  举报