2016-02-04 28 views
3

是否有任何情況下,在單線程編程的情況下volatile是有用的?我知道它用於確保變量的值總是在內存中進行檢查,所以有沒有這種情況下該值可能會改變(在ST應用程序中),使應用程序/編譯器不會注意到?在C#中的單線程應用程序中,volatile是否有用?

+1

不確定C#,但C的volatile屬性即使在單線程應用程序中也很有用,表示內存(變量)的特定區域可能在外部訪問(例如通過硬件),並且它不應該被緩存CPU。不確定是否轉換爲C#。 – Qix

+1

它在單線程應用程序中沒有用處,應該在多線程應用程序中避免它。您應該使用鎖,內存屏障或Volatile.Read(),而不是Volatile.Write()。 [這是Eric Lippert撰寫的一篇文章](https://blogs.msdn.microsoft.com/ericlippert/2011/06/16/atomicity-volatility-and-immutability-are-different-part-three/)他總結的內容: *我勸你不要做一個動盪的領域。*。 [和喬達菲稱揮發性「邪惡」...](http://joeduffyblog.com/2010/12/04/sayon​​ara-volatile/) –

+0

我不確定這一點。我們沒有考慮int處理多處理應用程序,其中'IntPtr'可能不是易失性的,但它可能指向一個字節數組,它本身就是一個指針,並且該值可能會改變。有點像int ** ptr =&ptr,C#版本,其中ptr可能會從另一個進程中更改 –

回答

1

不,這不是必要的。它用於同步線程之間的內存內容,以防萬一只有一個線程沒有意義。

相關問題