我有幾個簡單的(希望),我一直無法找到答案的提問 -Interlocked.Exchange澄清
說我有對象A,B是多個線程訪問。
Interlocked.Exchange(ref a, b)
如果'b'不是易失性的,那麼這個操作會如何對待它?即它會從內存中獲取這個變量的最新值嗎?如果是這樣,這是寫與讀'原子'?據我所知,Interlocked.Exchange的主要目的是,你會得到「A」的前值作爲新寫一個原子操作。但我的主要困惑在於'b'的實際寫入'a'的價值。
我的第二個問題是有關報價在這篇文章中:
http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/
「一個有趣的一點是,在C#中所有的寫操作是揮發性根據內存模型,在這裏和這裏記錄在案,並也大概是作爲這樣實現。C#語言的ECMA規範實際上定義較弱的模型,其中寫操作不是默認揮發性「。
這是真的嗎?如果是這樣,有Interlocked.Exchange的目的,如果不關心「A」的前值? (屬於我的第一個例子)。在每個寫操作都不穩定的時候,我沒有看到任何其他文章或有關StackOverflow的評論。然而,我明白寫道是原子的。
編輯:如果我的第一個問題的答案是'b'不被視爲易失性的,並且我的第二個問題的答案是寫入確實是不穩定的,那麼後續是當互鎖.exhange有用如果我們不關心'a'的先前價值?
'b'的'揮發性' '應該沒關係。 –