當且僅當滿足一下所有條件時,才應該使用volatile變數:
1、對變數的寫入操作不依賴變數的當前值,或者你能確保只有單個執行緒更新變數的值。
2、該變數不會與其他狀態量一起納入不變性條件中。
3、在訪問變數時不需要加鎖。
volatile變數通常用作某個操作完成、發生終端或者狀態的標誌。
volatile的語義不足以確保遞增操作(i++)的原子性,除非確保只有1個執行緒對變數執行寫操作。
原子變數提供了「讀-改-寫」的原子操作,並且常常用作一種「更好的volatile變數」。
加鎖機制既可以確保可見性又可確保原子性,而volatile只能確保可見性。
多執行緒 volatile
目錄 1.volatile關鍵字的兩層含義 2.volatile關鍵字的原理和實現機制 3.volatile關鍵字的使用場景 4.volatile關鍵字與synchronized關鍵字的比較 1 保證了不同執行緒對這個變數進行操作的可見性。2 禁止進行指令重排序,能在一定程度上保持有序性。volat...
執行緒篇 volatile
volatile 可以解決可見性與有序性問題 cpu層面的記憶體屏障 1.store barrier 強制所有在store屏障指令之前的stroe指令,都在該stroe指 令執行之前都執行完畢,並把store快取的資料全部寫回到記憶體 2.load barrier 強制所有在load屏障指令之後的l...
多執行緒 volatile
volatile主要用途 1 保證可見性 對volatile變數的寫指令後會加入寫屏障 寫屏障 在屏障之前的對共享變數的改動都同步到主存 對volatile變數的讀指令前會加入讀屏障 讀屏障 在該屏障之後對共享變數的讀取載入的都是主存中的新資料 2 保證有序性 寫屏障保證指令重排序時,不會講寫屏障之...