1. 程式人生 > >volatile的原理和實現機制 || volatile到底如何保證可見性和禁止指令重排序的?

volatile的原理和實現機制 || volatile到底如何保證可見性和禁止指令重排序的?

下面這段話摘自《深入理解Java虛擬機器》:

  “觀察加入volatile關鍵字和沒有加入volatile關鍵字時所生成的彙編程式碼發現,加入volatile關鍵字時,會多出一個lock字首指令”

  lock字首指令實際上相當於一個記憶體屏障(也成記憶體柵欄),記憶體屏障會提供3個功能:

  1)它確保指令重排序時不會把其後面的指令排到記憶體屏障之前的位置,也不會把前面的指令排到記憶體屏障的後面;即在執行到記憶體屏障這句指令時,在它前面的操作已經全部完成;

  2)它會強制將對快取的修改操作立即寫入主存;

  3)如果是寫操作,它會導致其他CPU中對應