定义一个 a=1; 然后起三个线程去执行 a=a+1; 那么最终的执行结果会是什么呢?

2021-03-19 12:06:29 +08:00
 shunfy
3820 次点击
所在节点    程序员
27 条回复
SWBMESSI
2021-03-19 17:40:43 +08:00
count1: 0
count2: 29
count3: 1539222
count4: 32334689

用 go 程试了一下
ns09005264
2021-03-19 18:01:13 +08:00
![image.png]( https://i.loli.net/2021/03/19/NzQfkTFAnZYt5lc.png)
刚学 go,这样写对不对,这个模拟的是不加锁的效果
hello2060
2021-03-19 18:07:24 +08:00
@hauibojek 第一个把 a 读出来的最后一个写回去咋办
w99wjacky
2021-03-19 18:21:41 +08:00
如果 a 是基本数据类型,多核 cpu 空载下大概率是 2
但是本身这个写法结果是不可预知的。
no1xsyzy
2021-03-19 18:28:11 +08:00
欢迎投入 ponylang 怀抱,答案是“你不可能让两个 actor 同时写,没有一个 capability 支持这样操作”
ch2
2021-03-20 01:23:16 +08:00
@w99wjacky 线程的启动依赖于 OS 调度,有先后顺序,3 个线程同时读到 a=1 是非常小概率的事
xingheng
2021-03-20 14:28:55 +08:00
没有说语言环境,没有说 a 是局部还是全局变量,连示例代码都没有,猜毛线?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/763156

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX