volatile關鍵字的使用

2021-08-22 05:06:04 字數 794 閱讀 9839

msdn手冊中對volatile關鍵字的解釋:

大概的翻譯:

volatile關鍵字是乙個型別限定符,用於宣告乙個物件可以通過其他語句(例如作業系統、硬體或併發執行的執行緒)在程式中進行修改。

volatile關鍵字的兩個功能:

(1)防止編譯器對彙編指令做順序上的優化。

(2)防止暫存器儲存變數的副本值。 應用在多執行緒中

int gdata=10;//全域性變數

int fun()

thread1執行緒1

thread2執行緒2

指令的調優

1.編譯器對指令的調優 使用volatile關鍵字

void fun(int

*a)//上述的**,進過彙編編譯器可能優化彙編指令為:

void fun(int

*a)//如果不需要或防止編譯器對彙編指令作順序的優化,新增volatile關鍵字限定

void fun(volatile int* a)

2.程式執行時cpu對指令的調優 barrier()

當程式開始執行時,由於cpu的流水線技術,可能會對指令進行順序上的調優。以達到指令級並行,提高指令執行的速度。但是如果程式設計師不希望發生順序的調優,則可在可能發生調優的上下程式段之間新增barrier();以防止cpu對指令的調優。

volatile關鍵字的使用

volatile提醒編譯器它後面所定義的變數隨時都有可能改變,因此編譯後的程式每次需要儲存或讀取這個變數的時候,都會直接從變數位址中讀取資料。如果沒有volatile關鍵字,則編譯器可能優化讀取和儲存,可能暫時使用暫存器中的值,如果這個變數由別的程式更新了的話,將出現不一致的現象。下面舉例說明。經常...

關鍵字 volatile關鍵字的作用

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...

使用volatile關鍵字的場景

synchronized關鍵字是防止多個執行緒同時執行一段 那麼就會很影響程式執行效率,而volatile關鍵字在某些情況下效能要優於synchronized,但是要注意volatile關鍵字是無法替代synchronized關鍵字的,因為volatile關鍵字無法保證操作的原子性。通常來說,使用v...