volatile 是用來限制編譯器對變數的優化,即禁止讀取快取或暫存器中的資料,每次使用的時候必須重新從變數位址中讀取資料。
這樣可以避免以下三種情況產生的資料不同步:
1).硬體暫存器可修改變數;
2).中斷服務子程式中會訪問到的非區域性變數;
3).多執行緒中被共享的變數;
explicit含義
c++類中,若建構函式只有乙個引數,則當物件進行=初始化時,有乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件。
例如:class a
private:
int m_data; }
int main()
在這個建構函式前加上explicit關鍵字,可以防止建構函式的隱式轉換。
volatile與synchronized的區別
volatile本質是在告訴jvm當前變數在暫存器中的值是不確定的,需要從主存中讀取,synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住.volatile僅能使用在變數級別,synchronized則可以使用在變數,方法.volatile僅能實現變數的修改可見...
Volatile與Synchronized的區別
j a執行緒的記憶體模型 j a的執行緒記憶體模型中定義了每個執行緒都有乙份自己的共享變數副本 本地記憶體 裡面存放自己私有的資料,其他執行緒不能直接訪問,而一些共享變數則存在主記憶體中,供所有執行緒訪問。上圖中,如果執行緒a和執行緒b要進行通訊,就要經過主記憶體,比如執行緒b要獲取執行緒a修改後的...
volatile原理與技巧
為什麼使用 volatile 比同步代價更低?同步的代價,主要由其覆蓋範圍決定,如果可以降低同步的覆蓋範圍,則可以大幅提公升程式效能。而volatile 的覆蓋範圍僅僅變數級別的。因此它的同步代價很低。volatile 原理是什麼?volatile 的語義,其實是告訴處理器,不要將我放入工作記憶體,...