volatile關鍵字深入解讀

2021-09-19 14:49:20 字數 511 閱讀 7323

volatile關鍵字可以保證

1.實時性

2.有序性(禁止指令重排序)

指令重排序指程式執行期間的優化,發生在相同**指令以不同順序執行時在單執行緒內的結果一致時的優化手段,但是這種優化會在併發環境下出現問題。

操作變數值時,會將變數值從主存中讀取,載入至快取中(l1 cache或l2 cache等)

指一種底層操作,又稱為「記憶體柵欄」,對某個指令加lock,具有以下效果:

1.若在lock前發生指令重排序,執行到lock時之前所有指令全部執行完畢;

2.發生在lock之後的指令重排序,無法將lock前的指令加入到之後的指令重排;

3.保證此行的操作可以立即更新至主存中;

4.發生寫操作時,用到該變數的快取行無效,必須從主存中重讀

volatile主要使用「記憶體屏障」來保證變數的實時性,但是有一點需要注意,volatile並不能保證操作的原子性,在進行併發程式設計時,針對實際情況考慮是否需要對volatile變數進行同步操作。

深入理解volatile關鍵字

併發的三大性質 併發分析的切入點分為兩個核心,三大性質 public class volatiledemo thread.start try catch interruptedexception e isover true volatile修飾的共享變數進行寫操作時,會多出lock字首的指令,實現快...

面試點 解讀關鍵字volatile

面試點 解讀關鍵字volatile c語言面試題分析之一 一 volatile是什麼?volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊...

C 中 volatile 關鍵字的解讀

volatile關鍵字表示字段可能被多個併發執行執行緒修改。宣告為 volatile 的字段不受編譯器優化 假定由單個執行緒訪問 的限制。這樣可以確保該字段在任何時間呈現的都是最新的值。volatile修飾符通常用於由多個執行緒訪問而不使用 lock 語句 c 參考 語句對訪問進行序列化的字段。有關...