代码实战Go语言之channel代码实战-goroutine模拟双人网球_WonderChaos的博客-CSDN博客中,有一些语句没太明白,这篇详细学习一下:
var wg sync.WaitGroup
wg.Add(2)
wg.Wait()
defer wg.Done()
第6章 并发
6.2 goroutine
WaitGroup是一个计数信号量,可以用来记录并维护运行的goroutine。如果 WaitGroup
的值大于 0,Wait 方法就会阻塞。
关键字 defer 会修改函数调用时机,在正在执行的函数返回时才真正调用 defer 声明的函
数。
也就是说:
1、定义信号量wg(WaitGroup)并设置其数量为待运行goroutine的个数
2、WaitGroup值大于0,Wait方法就会阻塞,因此让main函数通过wg.Wait()等待运行的goroutine全部结束。
3、在每个goroutine中使用defer指定该goroutine使用的函数退出时调用wg.Done()减少信号量个数