2017-04-14 86 views
0

我將通過Volatile.Write實現對變量的非阻塞寫入。我應該爲這個變量的所有消費者使用Volatile.Read,還是沒有必要?如果我像往常一樣閱讀這個變量(沒有任何障礙),可能會發生什麼樣的影響?而同樣的問題有關Interlocked.Exchange非阻塞變量更新

回答

1

the documentation of the Volatile class

調用這些方法中的一個隻影響一個內存訪問。爲了提供有效的字段同步,對字段的所有訪問必須使用Volatile.Read和Volatile.Write。

可能出錯的事情之一是讀者可能會將值一次讀入寄存器,然後永遠讀取此緩存副本,而不會檢查值是否已更改。

Interlocked.Exchange一樣的東西。

一般來說,處理這類情況最好的辦法就是完全封裝一類提供一個getter制定者對哪些訪問通過VolatileInterlocked變量,從而保證該變量永遠不會被訪問裏面的變量任何其他手段。