NO IMAGE
目錄

volatile 關鍵字表示欄位可能被多個併發執行執行緒修改。宣告為 volatile 的欄位不受編譯器優化(假定由單個執行緒訪問)的限制。這樣可以確保該欄位在任何時間呈現的都是最新的值。

volatile 修飾符通常用於由多個執行緒訪問而不使用
lock 語句(C# 參考)
語句對訪問進行序列化的欄位。有關在多執行緒方案中使用 volatile 的示例,請參見如何:建立和終止執行緒(C# 程式設計指南)

volatile 關鍵字可應用於以下型別的欄位:

  • 引用型別。
  • 指標型別(在不安全的上下文中)。請注意,雖然指標本身可以是可變的,但是它指向的物件不能是可變的。換句話說,您無法宣告“指向可變物件的指標”。
  • 整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。
  • 具有整數基型別的列舉型別。
  • 已知為引用型別的泛型型別引數。
  • IntPtr 和 UIntPtr。

可變關鍵字僅可應用於類或結構欄位。不能將區域性變數宣告為 volatile

通過將 volatile 與 _shouldStop 資料成員一起使用,可以從多個執行緒安全地訪問此成員,而不需要使用正式的執行緒同步技術,但這僅僅是因為 _shouldStop 是 bool。這意味著只需要執行單個原子操作就能修改 _shouldStop。但是,如果此資料成員是類、結構或陣列,那麼,從多個執行緒訪問它可能會導致間歇的資料損壞。假設有一個更改陣列中的值的執行緒。Windows 定期中斷執行緒,以便允許其他執行緒執行,因此執行緒會在分配某些陣列元素之後和分配其他元素之前被中斷。這意味著,陣列現在有了一個程式設計師從不想要的狀態,因此,讀取此陣列的另一個執行緒可能會失敗。