volatile型別變數

2021-06-12 06:51:37 字數 575 閱讀 8100

最近在**裡發現了乙個叫volatile型別的變數,竟然從來沒見過,因此特搜尋一番,以增加點見識。

volatile

的作用: 作為指令關鍵字

,確保本條指令不會因編譯器

的優化而省略,且要求每次直接讀值.

簡單地說就是防止編譯器對**進行優化.比如如下程式:

xbyte[2]=0x55;

xbyte[2]=0x56;

xbyte[2]=0x57;

xbyte[2]=0x58;

對外部硬體而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器就不能像對待純粹的程式那樣對上述四條語句進行優化,只認為xbyte[2]=0x58(即忽略前三條語句,只產生一條機器**)。如果鍵入volatile,則編譯器會逐一的進行編譯並產生相應的機器**(四條).

一般說來,volatile用在如下的幾個地方:

1、中斷服務程式中修改的供其它程式檢測的變數需要加volatile;

2、多工環境下各任務間共享的標誌應該加volatile;

3、儲存器對映的硬體暫存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義;

volatile變數特性

1,可見性。對乙個volatile變數的讀,總是能看到 任意執行緒 對這個volatile變數最後的寫入。2,原子性。對任意單個volatile變數的讀 寫具有原子性,但類似於volatile 這種復合操作不具有原子性。當寫入乙個volatile變數時,jmm會把執行緒對應的本地記憶體中的共享變數重...

變數的屬性 型別限定符 volatile

volatile可以理解為 編譯器警告指示字 volatile告訴編譯器必須每次去記憶體中取變數值 volatile主要修飾可能被多個執行緒訪問的變數 volatile也可以修飾可能被未知因數更改的變數 如 int obj 0 int a 0 int a 0 a obj sleep 100 b ob...

正確使用Volatile 變數總結

1.正確理解鎖的概念,就要理解兩個key point 原子性 atmatic 與可見性。synchronized在原子性和可見性上都很好,volatile 在原子性上沒有強約束,在可見性上和synchronized一樣 可見性是指一直變數的內容在乙個執行緒中修改後,其他執行緒或方法能否在下次訪問時訪...