Volatile的實現原理


Volatile實現原則

有volatile變量修飾的共享變量進行寫操作的時候,會多出一行以Lock為前綴的匯編代碼,

這個前綴指令會在多核處理器下引發兩件事情:

1.將當前處理器緩存行的數據寫回到系統內存

2.這個寫回內存的操作會使在其他CPU里緩存了該內存地址的數據無效

概括性解釋

為了提高處理速度,CPU不直接和內存進行通信,而是先將系統內存的數據讀到內部緩存后再進行操作,

但操作完不知道何時會寫回到內存。

上圖: 最簡單的高速緩存配置圖

Main Memory——系統內存

Bus——總線

Cache——處理器緩存

CPU Core——處理器核

如果對聲明了volatile的變量進行寫操作,JVM就會向處理器發送一條Lock前綴的指令,將這個變量所在緩存行的數據寫回到系統內存

但是,就算寫回到內存,如果其他處理器緩存的值還是舊的,再執行計算操作就會有問題。

所以在多處理器下,為了保證各個處理器的緩存是一致的,就會實現緩存一致性協議,

每個處理器通過嗅探在總線上傳播的數據來檢查自己緩存的值是不是過期了,

處理器發現自己緩存行對應的內存地址被修改,就會將當前處理器的緩存行設置成無效狀態

處理器對這個數據進行修改操作的時候,就會重新從系統內存中把數據讀到處理器緩存里。

 

 

——參考自《Java並發編程的藝術》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM