volatile關鍵字詳解

2021-09-28 13:53:51 字數 471 閱讀 1251

volatile關鍵字是jvm提供的乙個最輕量級的乙個同步機制,jvm對volatile關鍵字有一些特殊的定義

當乙個變數被volatile關鍵字修飾的時候 它對於所有執行緒都是可見的 當乙個執行緒修改這個值的時候,新的值對於其他執行緒都是立刻得知的,而普通變數都是修改之後 再返回到主記憶體回寫 其他執行緒在主記憶體中獲取修改後的值

volatile變數在各個執行緒之間是一致的,但是運算在併發下面也是不安全的 

如果變數和其他變數共同參與不變約束需要加鎖 如果運算結果需要依賴變數的當前值或者有多個執行緒修改變數的值也需要加鎖

一般來說,普通變數在執行的時候,只需要結果正確,而不能保證執行順序和**的執行順序一致 而禁止指令重排有兩種意思

1) 當程式執行到volatile變數的操作的時候 要保證在其前面的更改肯定已經全部執行,並且結果對之後的操作可見,後面的操作沒有進行

2)在進行指令優化的時候 不能將volatile修飾的變數放在之前或者之後執行

關鍵字volatile詳解

與關鍵字const一樣,關鍵字volatile也是乙個型別修飾符 type specifier 關於volatile的作用 例如程式清單 volatile int m 10 int k,n m k i volatile將告訴編譯器,整形變數m是隨時發生變化的,每次使用m的時候,都要求從m的位址中找出...

volatile關鍵字 詳解

volatile 關鍵字 volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊位址的穩定訪問。使用該關鍵字的例子如下 int volati...

詳解Volatile關鍵字

volatile應用場景 2.volatile 產生的原因 3.總結 4.深入理解volatile 編譯器優化 c關鍵字volatile memory破壞描述符 對於c編譯器來說,它並不知道這個值會被其他執行緒修改。自然就把它cache在暫存器裡面。記住,c 編譯器是沒有執行緒概念的!這時候就需要用...