當兩個線程試圖在同一時間修改同一個屬性時會發生什麼?例如,如果我有int value = 0
,並且我有線程A value += 5
和線程B value -= 3
,會發生什麼情況?無論線程訪問變量的順序如何,我都應該得到相同的結果,但我想他們可以在同一時間訪問變量。併發加法和減法
併發加法和減法
回答
不,你不會得到相同的結果。儘管操作很簡單,但它不是處理器的原子操作。簡而言之,處理器需要將內存中的值提取到寄存器中,執行算術指令並將值存回內存。因此,它們可能會得到相同的值0,並且存儲的值取決於哪一個是最後一個值。
你可能會從不同的運行變化的結果,也可能是5,-3,2
哦,我明白了。那麼我會得到什麼樣的結果? – user2905368
未確定..你有一個數據競賽,你可能會得到不同的結果不同的運行。 –
啊我明白了。非常感謝你! – user2905368
有計算機沒有確切的同一時間。對於一根線然後對另一根線是一納秒或更少。它被稱爲時間切片。對於我們而言,+=
和-=
可能是單個操作,但對於處理器來說,這些是多個指令。
上面沒有同步的代碼會導致競爭條件,並且不會始終保證相同的值。
- 1. NSDate月加法和減法
- 2. 加法和減法程序
- 3. Imagechops減法和加法
- 4. Enum加法vs減法和施法
- 5. Python的訂單 - 加法和減法
- 6. MX:DividedBox動態面板加法和減法
- 7. 字符指針的加法和減法
- 8. MySQL - 加法,減法和計算日期
- 9. 休眠@Formula減法和加法
- 10. 數組的加法和減法
- 11. 德爾福:加法和減法
- 12. 無法演示併發增量/減量
- 13. 二進制加法/減法
- 14. 一個簡單的加法,減法,乘法和除法程序
- 15. 僅使用減法和加法的遞歸除法
- 16. 加法,減法,乘法和比率的標準誤差
- 17. 點心和減法運算加入
- 18. 張量流中的外加和減法
- 19. 用JavaScript添加和減法「onchange」
- 20. jquery計算所有文本框的總和(加法和減法)
- 21. 加法和減法後的浮點和小於等於
- 22. 發現一個數字,將通過加法或減法
- 23. 求和,減法和乘法陣列
- 24. 四元,並稱,在3D模型減法和除法運算
- 25. N位加法器/減法器VHDL
- 26. SQL條件加法或減法
- 27. 在jQuery中切換加法/減法
- 28. 邏輯函數加法或減法
- 29. Verilog簽名加法減法錯誤
- 30. 爲什麼COUT僅被佔加入期間和不減法在我的加法器/減法器(Verilog的)
_「我應該得到相同的結果,無論線程訪問哪個順序的變量」_但事實證明,你沒有。 – Radiodef
@Radiodef:謝謝你的迴應,但你能解釋一下嗎?如果線程A首先到達那裏,然後線程B,反之亦然,值應該仍然是2,對不對? – user2905368