多執行緒之volatile

2021-05-23 01:16:55 字數 387 閱讀 9050

現在進入了多核時代;程式也要發生一系列變化;比如說現在單純的變數已經不再安全了;

比如說乙個int型別的資料,我們同時開了幾個執行緒在跑。現在有了乙個執行緒突然改變了該int變數,我們的意圖是幾個執行緒都要把這個變數反映出來;但是往往事與願違。

讓我們來分下問題所在:

int a;

while(a)

程式執行到該段時,首先要從記憶體裡面讀取到暫存器裡面;然後程式從暫存器裡面讀取。

這裡就有了乙個漏洞了。假設我們的編譯器做了優化(在while迴圈那段),這樣一來,就會導致我們的變數的變化不能及時反映出來;我們 的軟體該做到的卻沒有做到。

這麼一來,我們自然想到,每次要從記憶體裡面讀取出來,不再度入到暫存器;

volatile就是在這種狀態下呼之而出了。

多執行緒之volatile關鍵字

現代計算機都是馮諾依曼結構的 volatile 變數具備兩種特性,其一是保證該變數對所有執行緒可見,這裡的可見性指的是當乙個執行緒修改了變數的值,那麼新的值對於其他執行緒是可以立即獲取的。其二 volatile 禁止了指令重排。多執行緒的執行可能造成變數資料的不一致 把該變數宣告為volatile ...

多執行緒 volatile

目錄 1.volatile關鍵字的兩層含義 2.volatile關鍵字的原理和實現機制 3.volatile關鍵字的使用場景 4.volatile關鍵字與synchronized關鍵字的比較 1 保證了不同執行緒對這個變數進行操作的可見性。2 禁止進行指令重排序,能在一定程度上保持有序性。volat...

多執行緒 volatile

volatile主要用途 1 保證可見性 對volatile變數的寫指令後會加入寫屏障 寫屏障 在屏障之前的對共享變數的改動都同步到主存 對volatile變數的讀指令前會加入讀屏障 讀屏障 在該屏障之後對共享變數的讀取載入的都是主存中的新資料 2 保證有序性 寫屏障保證指令重排序時,不會講寫屏障之...