volatile的使用及分析

2021-09-02 00:06:35 字數 911 閱讀 1684

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...