为了账号安全,请及时绑定邮箱和手机立即绑定

go 实现生产者与消费者模型,如何判断channel中数据已全部消费?

go 实现生产者与消费者模型,如何判断channel中数据已全部消费?

扬帆大鱼 2019-05-25 13:42:14
codepackagemainimport("fmt")varc=make(chanint,50)varcount=0funcmain(){fori:=0;i
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

这种可以使用sync里的WaitGroup工具来做等待,也可以单独开个channel来等待。如果只是想单纯的保证goroutine全部执行完毕再退出main,可以定义个相同数量buffer的channel,每个goroutine执行结束后就写入这个channel,而main只要消费等待channel就可以达到阻塞的目的了。
类似这样
varc=make(chanint,50)
varcount=0
varretChannel=make(chanint,5)
funcmain(){
fori:=0;i<5;i++{
goconsumer(i)
}
fori:=0;i<1000;i++{
c<-i
}
/**here**/
close(c)
fori:=0;i<5;i++{
<-retChannel
}
close(retChannel)
fmt.Println(count)
}
funcconsumer(indexint){
fortarget:=rangec{
fmt.Printf("no.%d:%d\n",index,target)
count++
}
retChannel<-index
}
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 432 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号