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

急求!!!!党goroutine调度被阻塞怎么处理,怎么解决?怎么回事哈啊?

急求!!!!党goroutine调度被阻塞怎么处理,怎么解决?怎么回事哈啊?

哆啦的时光机 2019-06-09 09:55:17
问题描述两个goroutine,一个goroutine中做键盘的输入,另一个goroutine做其它数据处理。运行后,如果我不输入数据,另一个goroutine也停止运行了。也没调度。我希望即使我不输入数据,也不要影响另一个goroutine。问题出现的环境背景及自己尝试过哪些方法相关代码//请把代码文本粘贴到下方(请勿用图片代替代码)packagemainimport("fmt""os""bufio""math/rand")funcmain(){msgChan:=make(chanstring)roundChan:=make(chanint)sleepChan:=make(chanbool)goinput(msgChan)goroundNum(roundChan)goScheduler(msgChan,roundChan)<-sleepChan}funcScheduler(msgChanchanstring,roundChanchanint){var(msgstringroundint)for{select{casemsg=<-msgChan:fmt.Println("msg:",msg)caseround=<-roundChan:fmt.Println(round)}}}funcroundNum(roundChanchanint){roundChan<-rand.Int()}funcinput(msgChanchanstring){var(msgstringerrerror)for{fmt.Println("请输入要回复的消息:")ifmsg,err=bufio.NewReader(os.Stdin).ReadString('\n');err!=nil{return}msgChan<-msg}}你期待的结果是什么?实际看到的错误信息又是什么?期待:可以随时输入键盘数据,如果我输入键盘数据两个goroutine都正常运行。如果我不输入键盘数据,也不要影响另一个goroutine的执行。
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

我把你的排版和标签都修改了,以后提问问题需要注意
根据你的描述,我猜测你想问的是fmt.Println(round)这个为啥一直不执行是吧。
肯定会打印一次,因为你的roundNum函数执行一次,发送了一个消息;然后它之后就退出了,所以以后你再也见不到它了;所以也没所以了
                            
查看完整回答
反对 回复 2019-06-09
  • 2 回答
  • 0 关注
  • 601 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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