golang的sync.WaitGroup学习笔记

在golang中我们经常开启goroutine,很多新手可能踩过坑,明明开启了go func但是没有执行,函数就结束了。原因是主协程执行完毕返回结束整个进程,导致其他go func还没有执行就结束。对此种现象可以使用sleep解决,但是休息多久呢?1 微妙、1 毫秒、 1 秒这个无法确定,因为我们很难预测go func中需要执行多久,sleep过久导致浪费时间,sleep时间短了go func还没有执行完毕。这个时候sync.WaitGroup很好的解决了这个问题。WaitGroup官方是这样解释流程的:W
摘要由CSDN通过智能技术生成
在golang中我们经常开启goroutine,很多新手可能踩过坑,明明开启了go func但是没有执行,函数就结束了。原因是主协程执行完毕返回结束整个进程,导致其他go func还没有执行就结束。对此种现象可以使用sleep解决,但是休息多久呢?1 微妙、1 毫秒、 1 秒这个无法确定,因为我们很难预测go func中需要执行多久,sleep过久导致浪费时间,sleep时间短了go func还没有执行完毕。这个时候sync.WaitGroup很好的解决了这个问题。WaitGroup官方是这样解释流程的:WaitGroup等待goroutine的集合完成。主goroutine调用Add来设置,等待的goroutines。 然后每个goroutines运行并在完成后调用完成。 同时,等待可用于阻塞,直到所有goroutine完成。首次使用后不得复制WaitGroup。

先看一个使用的demo

	var i  int64
	wg := sync.WaitGroup{}	//生成WaitGroup对象
	wg.Add(2)			//Add来设置要等待的协程数
	for index := 0; index < 2; index++{
		mu := &sync.Mutex{}
		go func( ){
			defer wg.Done()		//Done当go func用于告知等待结束
			mu.Lock()
			defer mu.Unlock()
			for num := 0; num < 10000; num++{
				//atomic.AddInt64(&i,1)
				i++
			}
			fmt.Println("i=",i)
		}()
	}
	wg.Wait()				//主协程进行等待

现在我们分析一下WaitGroup的原

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值