在Go语言中,sync.WaitGroup结构体对象用于等待一组线程的结束;WaitGroup是go并发中最常用的工具,我们可以通过WaitGroup来表达这一组协程的任务是否完成,以决定是否继续往下走,或者取任务结果;
结构如下所示:
type WaitGroup struct { noCopy noCopy state1 [3]uint32 }
在sync.WaitGroup结构体对象中有三个方法,Add()、Done()、Wait()
主要为WaitGroup的等待数+1或者+n;
Add()方法的定义如下:
func(*WaitGroup) Add()
Done函数调用的也是Add函数,主要用于-1操作;
Done()方法的定义如下:
func(wg *WaitGroup) Done()
阻塞当前协程,直到等待数归为0才继续向下执行;
Wait()方法的定义如下:
func (wg *WaitGroup) Wait()
Wait()方法会阻塞,知道WaitGroup计数器减为0.
使用sync.WaitGroup等待goroutine结束的示例如下图所示: