作者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/m.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