go协程吃苹果的问题!打印结果看不懂,负了10多万

blackdinosuar · 2019-08-22 17:56:22 · 2095 次点击 · 预计阅读时间不到 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2019-08-22 17:56:22 的文章,其中的信息可能已经有所发展或是发生改变。

apple.JPG

r1.JPGr2.JPG

//第一个疑问 第一行的结果是什么鬼 打印了半截? //第二个疑问不论哪个协程先进入for{}循环一定会拿到apple 进行打印.是不是fmt.Println()打印函数有延时


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2095 次点击  
加入收藏 微博
5 回复  |  直到 2019-08-30 16:43:56
wangliangdong
wangliangdong · #1 · 6年之前

每个协程是运行在不同的逻辑处理器上的,默认是并行的,可能你的一个协程减到0的时候,另一个协程又执行了--运算,等于0这个条件就永远不满足了

wangliangdong
wangliangdong · #2 · 6年之前

上面说的不严谨,是go的调度器会平均分配在不同的逻辑处理器上。如果你是单核,这应该就是运行到第二个协程就是-1开始一直减的一个死循环了,想要不同协程共享这个apple数据用通道做

blackdinosuar
blackdinosuar · #3 · 6年之前
wangliangdongwangliangdong #1 回复

每个协程是运行在不同的逻辑处理器上的,默认是并行的,可能你的一个协程减到0的时候,另一个协程又执行了--运算,等于0这个条件就永远不满足了

我的版本是 go1.12.5 好像是默认开启多核的.上面打印的原因找到了,应该是控制台放不到了. 打印的结果应该就是你说的,不断的有其他的线程修改变量,0刚好跳过了.改成<=0就可以了.~~~~谢谢解答

aixinaxc
aixinaxc · #4 · 6年之前

那欠的苹果谁来补

fwhez
fwhez · #5 · 6年之前

markdown会写吗,发图片》。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传