被遺忘的volatile關鍵字

1,是類型修飾符,用來修飾被不同線程訪問和修改的變量,如果沒有volatile,基本上會導致這樣的結果:要麼無法編寫多線程程序,要麼編譯器失去大量優化的機會。

2,作用:作爲指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.

3,使用場景:

   優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器裏的備份

   一箇中斷服務子程序中會訪問到的非自動變量

   多線程應用中被幾個任務共享的變量

說詳細點:

volatile int i = 10;

a = i;

b = i;

volatile 指出 i是隨時可能發生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的彙編代碼會重新從i的地址讀取數據放在b中。而優化做法是,由於編譯器發現兩次從i讀數據的代碼之間的代碼沒有對i進行過操作,它會自動把上次讀的數據放在b中。而不是重新從i裏面讀。這樣一來,如果i是一個寄存器變量或者表示一個端口數據就容易出錯,所以說volatile可以保證對特殊地址的穩定訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章