1. 程式人生 > >volatile 實現原理

volatile 實現原理

volatile實現原理

volatile變量自身具有下列特性:

  1. 可見性。對一個volatile變量的讀,總是能看到(任意線程)對這個volatile變量最後的寫入。

  2. 原子性:對任意單個volatile變量的讀/寫具有原子性,但類似於volatile++這種復合操作不具有原子性。

其實現原理為:

1,通過插入內存屏障指令禁止編譯器和CPU對程序進行重排序。

2,當對聲明了volatile的變量進行寫操作時,JVM就會向處理器發送一條Lock前綴的指令,這條Lock前綴指令產生如下兩個作用:

1)Lock前綴指令會引起處理器緩存回寫到系統內存,並使用緩存一致性機制來確保回寫的原子性。

2)一個處理器的緩存回寫到系統內存會導致其他處理器的緩存無效。處理器使用MESI控制協議去維護內部緩存和其他處理器緩存的一致性。處理器能嗅探其他處理器訪問系統內存和它們的內部緩存。處理器使用嗅探技術保證它的內部緩存、系統內存和其他處理器的緩存的數據在總線上保持一致。例如,在Pentium和P6 family處理器中,如果通過嗅探一個處理器來檢測其他處理器打算寫內存地址,而這個地址當前處於共享狀態,那麽正在嗅探的處理器將使它的緩存行無效,在下次訪問相同內存地址時,強制執行緩存行填充。


volatile 實現原理