對volatile關鍵字的理解以及底層實現原理?

2021-10-24 08:20:21 字數 360 閱讀 5820

volatile是多執行緒共享靜態變數時,保證共享變數的可見性。

底層原理:

底層是通過lock字首指令實現的,它會鎖定該記憶體區域的快取(快取行鎖定),並回寫到主記憶體。

這個回寫操作會使其他cpu裡快取了該記憶體位址的資料失效。

mesi快取一致性協議

多個cpu從主記憶體中讀取同乙個資料到各自的快取記憶體,當其中乙個cpu修改了快取裡的資料,該資料會馬上被同步回主記憶體,其他cpu通過匯流排嗅探機制可以感知到資料的變化從而將自己快取裡的資料失效。

對volatile關鍵字的理解

來看下面這樣乙個例子 public class threadtest backgroundthread.start timeunit.seconds.sleep 1 stoprequested true 我們希望backgroundthread 執行緒能夠在睡眠一秒後停止,但是實際情況是執行緒陷入了...

對volatile關鍵字的理解

volatile關鍵字是給編譯器看的,c語言是一種操作性語言,與硬體底層關係比較密切,尤其是在嵌入式領域。比如如下程式 a 1 a 2 a 4 printf d n a 經過編譯器優化後可能就變成了 a 4 printf d n a 無形中a 1和 a 2的操作就被省去了,表面是沒問題,但是在嵌入式...

對volatile關鍵字的理解

如果volatile變數與普通變數發 了重排序,雖然volatile變數能保證記憶體可 性,但是可能導致普通變數讀取錯誤 jvm通過記憶體屏障來實現限制處理器的重排序。編譯器在生成位元組碼時,會在指令序列中插入記憶體屏障來禁止特定型別的處理器重排序 編譯器選擇了 個 較保守的jmm記憶體屏障插 策略...