golang等待多任务完成的方式----使用sync.WaitGroup

在并发过程中,往往需要用一种方式,来通知别的协程,自身任务已经完成, 比如协程A发送10个消息后,告诉协程B,我已经发完了。对于go来说,想实现有三种方式

  • 主动等待一段时间,比如等个1s,1s后就默认已经发完(实际可能并没有完成)
  • 利用无缓冲channel
  • 利用sync.WaitGroup

这里主要将第三种,涉及的方法如下

var group sync.WaitGroup 
// 添加10个任务,数量根据自身需要改
group.ADD(10)
// 任务数减一,或者完成任务数+1
group.Done()

// 等待10个任务全部结束,不然就一直阻塞
group.Wait()

下面是例子 

package main

import (
	"fmt"
	"sync"
)

func producer(group *sync.WaitGroup){
	for i:=0;i<Len;i++{
		c<-i
		fmt.Println("Produce i:",i)
		group.Done()
	}
}

const Len  = 10
var c  =make(chan int,Len)
func main(){
	var group sync.WaitGroup
	group.Add(Len)
	go producer(&group)
	go consumer(&group)
	group.Wait()
}

func consumer(group *sync.WaitGroup){
    for v:=range c{
    	fmt.Println("Consumer get ",v)
	}
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值