2013-10-22 54 views
0

當兩個線程試圖在同一時間修改同一個屬性時會發生什麼?例如,如果我有int value = 0,並且我有線程A value += 5和線程B value -= 3,會發生什麼情況?無論線程訪問變量的順序如何,我都應該得到相同的結果,但我想他們可以在同一時間訪問變量。併發加法和減法

+0

_「我應該得到相同的結果,無論線程訪問哪個順序的變量」_但事實證明,你沒有。 – Radiodef

+0

@Radiodef:謝謝你的迴應,但你能解釋一下嗎?如果線程A首先到達那裏,然後線程B,反之亦然,值應該仍然是2,對不對? – user2905368

回答

1

不,你不會得到相同的結果。儘管操作很簡單,但它不是處理器的原子操作。簡而言之,處理器需要將內存中的值提取到寄存器中,執行算術指令並將值存回內存。因此,它們可能會得到相同的值0,並且存儲的值取決於哪一個是最後一個值。

你可能會從不同的運行變化的結果,也可能是5,-3,2

+0

哦,我明白了。那麼我會得到什麼樣的結果? – user2905368

+0

未確定..你有一個數據競賽,你可能會得到不同的結果不同的運行。 –

+0

啊我明白了。非常感謝你! – user2905368

1

有計算機沒有確切的同一時間。對於一根線然後對另一根線是一納秒或更少。它被稱爲時間切片。對於我們而言,+=-=可能是單個操作,但對於處理器來說,這些是多個指令。

上面沒有同步的代碼會導致競爭條件,並且不會始終保證相同的值。