volatile記憶體語義的實現

2021-10-10 07:48:29 字數 590 閱讀 2905

為了實現volatile的記憶體語義,編譯器在生成位元組碼時,會把指令序列中插入記憶體屏障來禁止特定型別的處理器重排序。下面是基於保守策略的jmm記憶體屏障插入策略

在每個volatile寫操作前面插入乙個storestore屏障

在每個volatile寫操作後面插進入乙個storeload屏障

在每個volatile讀操作的後面插入乙個loadload屏障

在每個volatile讀操作的後面插入loadstore屏障

loadload屏障用來禁止處理器把上面的volatile讀與下面的普通讀重排序。

loadstore屏障用來禁止處理器把上面***ltile讀與下面的普通寫重排序。

volatile記憶體語義

1 可見性 不管是volatile讀還是volatile寫,都會重新訪問主記憶體取最新的值 2 有序性 防止重排序 volatile寫前 storestore屏障 首先先把前面的普通寫操作執行到主記憶體,在執行volatile寫操作執行到記憶體 保證前面普通寫操作和volatile寫操作不重排,前面...

volatile的記憶體語義

volatile的應用與底層原理詳見 volatile的應用與底層原理 class volatilefeature ample public void getandincrement public long get 假設有多個執行緒分別呼叫上面程式的3個方法,這個程式在語義上和下面程式等價。clas...

volatile的記憶體語義

一 保證記憶體的可見性 二 對任意單個volatile變數的讀 寫具有原子性,但類似於volatile 這種復合操作不具有原子性 三 禁止指令的重排序 解析 一 對於使用volatile關鍵字的共享變數,會強制將修改後的值立即寫入主記憶體,並會使得其他處理器裡面的快取行失效 嗅探機制,快取一致性協議...