vlolatile修飾的變數可以做為共享變數,在多執行緒中可見。意思是,在乙個執行緒中volatile修飾的變數修改了,其他呼叫此變數的執行緒中同樣可以看到修改。
兩個執行緒a、b,b在a中,a修改了b中的變數值,b中可以看到修改。
public class usevolatile extends thread
public void run()
system.err.println("執行緒結束。。。");
} public static void main(string args) catch (interruptedexception e)
//修改count的值,期待nv執行緒結束
uv.setcount(5);
system.err.println("已經修改count的值。。");
}}
測試結果:
執行main方法後uv執行緒並沒有結束。
用volatile修改count變數再測試
private volatile int count = 0;
結果為:
可見volatie修飾的變數能在多執行緒中共享,那麼volatile是如何實現的呢?這要從執行緒和主記憶體談起。
乙個執行緒可執行的操作有使用、賦值、裝載、儲存、鎖定、解鎖。
主記憶體可執行的操作為讀、寫、鎖定、解鎖
volatie的作用就是強制執行緒從主記憶體共享變數中去讀取變數,而不是從執行緒工作記憶體區讀取,從而實現了多執行緒之間的變數可見。
volatile的作用及理解
被volatile 修飾的變數 不存在原子性 因為他的讀操作和寫操作是分開的,所以並不是執行緒安全的.必須同時滿足下面兩個條件才能保證在併發環境的執行緒安全 1 對變數的寫操作不依賴於當前值。比方說 i 就會失效 但是 q b 1 b用volatile 修飾就沒事 2 該變數沒有包含在具有其他變數的...
volatile的使用場景
單詞解釋 亂序執行 指cpu對 的執行順序進行亂序優化,但保證各執行 單元的順序按指令順序排列。以達到充分利用處理器的各處理單元的目的。可以理解成 乙個任務有不同的執行單元,這些單元之間有一定的執行順序,但部分執行單元可提前工作,亂序執行就是讓這部分執行單元提前一段時間執行,從而提高整體的效率,減少...
c語言volatile實戰分析
一直有這樣的乙個概念,volatile修飾的變數,程式在讀取該值的時候,不是在暫存器中讀取,而是從變數所在的記憶體中讀取。下面寫個程式測試一下 include int b 100 int main void gcc編譯流程 1.預處理,生成預編譯檔案 檔案 gcc e hello.c o hello...