作者:ReganYue
来源:恒生LIGHT云社区
大家好,这里是努力变得优秀的R君,这次我们继续来进行Golang系列《让我们一起Golang》,区块链系列内容明年会继续更新,共识算法已经基本完毕,如果不出意外,元旦那个星期就是介绍如何构建公链项目了,本次我们来了解Golang的同步等待组,这也是一个比较容易理解的知识点,我们来看一看吧!
我们现在开十条子协程,然后当十条子协程全部结束后,主协程立马结束。动动你的小脑袋,想一想应该怎么做?如果是一条子协程的话就很容易实现,当这条子协程结束时让主协程结束就行了。但是我们现在是10条,让任何一条子协程发布让主协程结束的命令都不行,因为你无法确定哪一条子协程是最后结束的。所以我们现在用上了等待组。
等待组是什么原理呢?创造一个子协程就登记一下,然后子协程干完活就将其除名,名单除干净了就结束主协程。
我们来看看等待组的有关示例:
func main() {
fmt.Println(time.Now())
var wg sync.WaitGroup
//起一个协程就加一
wg.Add(1)
go func() {
for i:=0;i<5;i++{
fmt.Println(i)
//相当于阻塞一秒,读到时间