volatile的作用及理解

2021-09-09 05:28:59 字數 461 閱讀 1168

被volatile 修飾的變數 不存在原子性 ,因為他的讀操作和寫操作是分開的,所以並不是執行緒安全的.

必須同時滿足下面兩個條件才能保證在併發環境的執行緒安全:

(1)對變數的寫操作不依賴於當前值。

比方說  i++  就會失效  但是 q= b+1  ;b用volatile  修飾就沒事

(2)該變數沒有包含在具有其他變數的不變式中。

比如int a = 0;

int b = a+1;

for (int i = 0; i < 10; i++) 這裡的b不用用volatile 修飾

最大的特性是記憶體可見性,

保證各執行緒每次訪問的時候都是最新的修改的變數值.一般的變數物件被存在主記憶體中(共享),執行緒要用的時候會把這個物件拷貝乙份到自己的工作記憶體,在工作記憶體中操作該變數,在操作完之後再寫道主記憶體中.

volatile作用及應用舉例

保證執行緒可見性 不能代替synchronized 保證原子性 禁止指令重排序 細節與cpu有關雙重判斷單例 要不要加volatile 需要 一定需要 防止指令重排 synchronized 不能防止重排序 public class singletonclass return instance pr...

C 中volatile的作用

volatile的語法和const的是一樣的,但是volatile的意思是 在編譯器認識的範圍外,這個資料可以改變 環境正在改變資料 可能通過多工 多執行緒或者中斷處理 所以,volatile告訴編譯器不要擅自做出有關該資料的任何假定,優化期間尤其如此。volatile的本意是一般有兩種說法 1.暫...

volatile的作用和舉例

1 作用 作為指令關鍵字,確保本條指令不會因為編譯器的優化而省略,要求每次直接讀值。舉例 int a 10 a 5 a 3 如果不加volatile,編譯器會認為a 3,所以上面兩條指令不會產生機器 2 習題 1 乙個引數既可以是const還可以是volatile嗎?解釋為什麼。2 乙個指標可以是v...