C 中volatile關鍵字的使用

2021-10-01 09:20:35 字數 590 閱讀 9571

有些變數是用volatile關鍵字宣告的。當兩個執行緒都要用到某乙個變數且該變數的值會被改變時,應該用volatile宣告,該關鍵字的作用是防止優化編譯器把變數從記憶體裝入cpu暫存器中。如果變數被裝入暫存器,那麼兩個執行緒有可能乙個使用記憶體中的變數,乙個使用暫存器中的變數,這會造成程式的錯誤執行。volatile的意思是讓編譯器每次操作該變數時一定要從記憶體中真正取出,而不是使用已經存在暫存器中的值,如下:

volatile  bool  bstop  =  false;

// 在乙個執行緒中:

while

(!bstop )

bstop = false;

return

;//在另外乙個執行緒中,要終止上面的執行緒迴圈:

bstop = true;

while

( bstop )

;//等待上面的執行緒終止,

如果bstop不使用volatile申明,那麼這個迴圈將是乙個死迴圈,因為bstop已經讀取到了暫存器中,暫存器中bstop的值永遠不會變成false,加上volatile,程式在執行時,每次均從記憶體中讀出bstop的值,就不會死迴圈了。

C 中volatile關鍵字

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

C 中的 volatile 關鍵字

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

C 中的 volatile 關鍵字

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