如果線程正常工作,最高值「x」可以是15.這一切都取決於操作系統的調度程序。
請注意,我假設x的初始值爲0! 可以說,線程A和線程B是序列化的。 x的線程A後的數值是完整會5.
i | x
-------
0 | 1
1 | 2
2 | 3
3 | 4
4 | 5
X進入線程B的值將是5,結果x是15
i | x
-------
0 | 7
1 | 9
2 | 11
3 | 13
4 | 15
最終值現在,事情通常不會以這種方式發生,並且線程將讀取x的初始值並進行相加,然後將其修改後的值寫回到內存中。以下情況可能發生。
Thread A reads the value 'x' as 0
Thread B reads the value 'x' as 0
Thread A adds 1 to x making its local copy of x, 1
Thread B adds 2 to x making its local copy of x, 2
Thread A writes its modified value of x as 1
Thread B writes its modified value of x as 2 (overwriting Thread A's modification)
因此,x不會超過15,但取決於調度程序,會更少!
Stackoverflow往往是相當開放的關於幫助人們做家庭作業,但請標記爲這樣。 – gbtimmon
@gbtimmon - 實際上,[作業]標籤現在已經過時。 – ArjunShankar
@ gbtimmon家庭作業標記已被棄用,不會被使用。 – Joe