使用goroutine出现BUG,请帅裂苍穹的道友帮忙看下

weixin_38066919 2019-09-20 10:39:52
我使用goroutine多线程的时候,执行以下语句,最后一次执行偶尔发生不执行的情况


如下图,最后一次执行应该输出 world,4 但是没有输出
请大家帮忙看看这是什么原因啊
...全文
45 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38067167 2019-09-20
  • 打赏
  • 举报
回复
因为主协程结束了。所以子协程没跑完就被关闭了 正确的做法应该是: wg :=make(sync.Waitgroup) func main{ wg.Add(2) go say("world") go say("hello") wg.Wait() } func say(s string){ //你的代码...后面加上这句 wg.Done() }
weixin_38067822 2019-09-20
  • 打赏
  • 举报
回复
正解。主协程退出,子协程没有跑完
weixin_38073387 2019-09-20
  • 打赏
  • 举报
回复
主綫程執行比go協程執行要快,主綫程執行結束之後關閉所以協程沒法執行。 建議讀一下GO并發編程這本書,裏面有詳細底層原理介紹。

473

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧