1 yamasa 2021-03-19 12:16:48 +08:00 你需要补充多线程和并行的基础知识。答案是 unknown,根据 cpu 调度,1-4 之间全部可能。 |
2 Chenamy2017 2021-03-19 12:29:02 +08:00 这不是操作系统里面并发的基本例子吗,自己跑一下比你问强多了。 |
3 nightwitch 2021-03-19 12:29:15 +08:00 ![]() 未定义行为 |
![]() | 7 CEBBAT 2021-03-19 13:11:21 +08:00 via Android 涉及可重入性,单纯地问答案其实没有什么意义 |
![]() | 8 webcoder 2021-03-19 14:11:40 +08:00 不作线程锁的话,2-4 都有可能。 |
![]() | 9 ch2 2021-03-19 14:17:29 +08:00 ![]() 结果为 4 的可能性是最大的,2 和 3 的情况比 segement fault 还要罕见 |
10 beat 2021-03-19 14:23:00 +08:00 做好并发控制,答案就是 4 |
11 gdt 2021-03-19 14:37:36 +08:00 随机的 |
![]() | 12 xuanbg 2021-03-19 14:47:55 +08:00 等待足够的时间,a 就是 4 。 |
13 hauibojek 2021-03-19 15:03:12 +08:00 都执行完不是 4 吗。 |
![]() | 14 cxe2v 2021-03-19 15:08:09 +08:00 a=a+1 够复杂耗时的话,结果应该就会有明显差异了 |
15 hejw19970413 2021-03-19 15:30:38 +08:00 这个 都有可能。 |
![]() | 16 nullllllllllllll 2021-03-19 15:51:22 +08:00 首先我们排除掉 0[狗头] |
![]() | 17 norz 2021-03-19 16:18:35 +08:00 @nullllllllllllll 再排除掉 1[狗头] |
18 faceRollingKB 2021-03-19 16:23:08 +08:00 读 1 、写 1 、读 2 、写 2 、读 3 、写 3 除了读 n 位于写 n 之前外其他操作随机排列组合,就可以得出所有可能的结果 |
![]() | 19 realpg PRO 现代计算机,没特殊情况,99%可能是 4 当然你要起十万个线程就不可能正好 |
![]() | 20 mingl0280 2021-03-19 17:23:33 +08:00 via Android 那要看你用的是 atomic 还是非 atomic 的,算法有没有加锁等等情况,atomic/正确加锁的就是 4,其他的随机 2-4 都有可能。 |
![]() | 21 SWBMESSI 2021-03-19 17:40:43 +08:00 count1: 0 count2: 29 count3: 1539222 count4: 32334689 用 go 程试了一下 |
![]() | 22 ns09005264 2021-03-19 18:01:13 +08:00  刚学 go,这样写对不对,这个模拟的是不加锁的效果 |
![]() | 24 eInKLX6Kh6sS3wyc 2021-03-19 18:21:41 +08:00 如果 a 是基本数据类型,多核 cpu 空载下大概率是 2 但是本身这个写法结果是不可预知的。 |
![]() | 25 no1xsyzy 2021-03-19 18:28:11 +08:00 ![]() 欢迎投入 ponylang 怀抱,答案是“你不可能让两个 actor 同时写,没有一个 capability 支持这样操作” |
![]() | 27 xingheng 2021-03-20 14:28:55 +08:00 没有说语言环境,没有说 a 是局部还是全局变量,连示例代码都没有,猜毛线? |