作者AndrewTsai46 (重庆酸辣粉酸4辣1)
看板Grad-ProbAsk
标题[理工] 作业系统 Race condition
时间Sat Sep 14 20:07:54 2019
https://i.imgur.com/UxAZ0uA.jpg
这题来回加都没法不等於10
还是回圈展开後 可以reorder指令顺序导致最後一行X先做
谢谢感激不尽
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.137.174.4 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Grad-ProbAsk/M.1568462876.A.4A3.html
1F:→ DLHZ: after "both" 09/14 20:50
2F:推 b10007034: x+=1可以拆解为三个动作,1 read reg. 2 add 3 write 09/14 22:18
3F:→ b10007034: reg. 09/14 22:18
4F:→ b10007034: 如果这个x+=1没有处理同步的话,那这两个thread都进行 09/14 22:18
5F:→ b10007034: 时就会有race condition 09/14 22:18
6F:→ b10007034: 考虑以下instructions 09/14 22:18
7F:→ b10007034: th1 read x(0) 09/14 22:18
8F:→ b10007034: th2 read x(0) 09/14 22:18
9F:→ b10007034: th1 add result=1 09/14 22:18
10F:→ b10007034: th2 add result=2 09/14 22:18
11F:→ b10007034: th1 write x(1) 09/14 22:18
12F:→ b10007034: th2 write x(1) 09/14 22:18
13F:→ b10007034: 本来应该为2,可是因为都读到0,所以最後结果为1 09/14 22:18
14F:→ ok8752665: 两个reault都是1吧 09/14 22:24
15F:→ ok8752665: result 09/14 22:24
16F:推 b10007034: 依照刚刚的逻辑就会到5 09/14 22:38
17F:→ b10007034: 从instruction的角度有点像是sequential 需要reorder 09/14 22:38
18F:→ b10007034: 或是forwarding解决data hazard 09/14 22:38
19F:→ b10007034: 但这边是parallel,要用同步解决 09/14 22:38
20F:→ DLHZ: 说明一下 题目只提到load/write有atomic 如果都照顺序当然没 09/14 23:23
21F:→ DLHZ: 问题 结果就是10 如果有一次某个程式load x时另一个还没写回 09/14 23:23
22F:→ DLHZ: 去就会造成该加一的x得到跟另一个程式一样的结果 如果五次都 09/14 23:23
23F:→ DLHZ: 遇到同样的情况最多就少五 所以x的可能性就是5~10 09/14 23:23
24F:→ AndrewTsai46: 了解了 感谢大家 09/16 09:57