博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 同步等待所有协程执行完毕sync WaitGroup
阅读量:6125 次
发布时间:2019-06-21

本文共 717 字,大约阅读时间需要 2 分钟。

golang的sync的包有一个功能WaitGroup

 

作用

阻塞主线程的执行,直到所有的goroutine执行完成,说白了就是必须同步等待所有异步操作完成!!!

 

三个方法

Add:添加或者减少等待goroutine的数量

Done:相当于Add(-1)

Wait:执行阻塞,直到所有的WaitGroup数量变成0

 

example:

package mainimport (	"fmt"	"sync"	"time")func main() {	var wg sync.WaitGroup	for i := 0; i < 5; i = i + 1 {		wg.Add(1)		go func(n int) {			// defer wg.Done()			defer wg.Add(-1)			EchoNumber(n)		}(i)	}	wg.Wait()}func EchoNumber(i int) {	time.Sleep(3e9)	fmt.Println(i)}

  程序很简单,只是将每次循环的数量过3秒钟输出。那么,这个程序如果不用WaitGroup,那么将看不见输出结果。因为goroutine还没执行完,主线程已经执行完毕。注释的defer wg.Done()和defer wg.Add(-1)作用一样。

这个很好,原来执行脚本,都是使用time.Sleep,用一个估计的时间等到子线程执行完。WaitGroup很好。虽然chanel也能实现,但是觉得如果涉及不到子线程与主线程数据同步,这个感觉不错。

转载于:https://www.cnblogs.com/huangliang-hb/p/9668921.html

你可能感兴趣的文章
React 整洁代码最佳实践
查看>>
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>
移动端架构的几点思考
查看>>
Spark综合使用及用户行为案例区域内热门商品统计分析实战-Spark商业应用实战...
查看>>
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>