C 中的 volatile 關鍵字

2021-09-05 20:49:59 字數 647 閱讀 4330

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

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

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

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

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

C 中volatile關鍵字

volatile 限定符告知計算機,而不是變數所在的程式 可以改變該變數的值。通常,它被用於硬體位址以及在其他程式或者同時執行的執行緒中共享資料。例如,乙個位址上可能儲存著當前的始終時間,無論程式做什麼,位址上的值都隨著時間的變化而變化。或者乙個位址用於接受另一台計算機傳入的資訊。volatile的...

C 中的 volatile 關鍵字

volatile關鍵字表示字段可能被多個併發執行執行緒修改。宣告為 volatile 的字段不受編譯器優化 假定由單個執行緒訪問 的限制。這樣可以確保該字段在任何時間呈現的都是最新的值。volatile修飾符通常用於由多個執行緒訪問而不使用 lock 語句 c 參考 語句對訪問進行序列化的字段。有關...

C中的volatile關鍵字

volatile是c中的關鍵字,一般在嵌入式中用的比較多,其用來解決變數在 共享 環境下容易出現讀取錯誤的問題。若變數被定義為volatile,則代表著該變數可能會被意想不到的改變,即在程式執行過程中一直變,這個值每次被處理時,都要從記憶體中讀取該值,而不會因編譯器優化從快取的地方讀取 比如說讀取快...