volatile關鍵字的特性總結

2022-09-20 06:09:16 字數 429 閱讀 5137

當乙個變數定義為volatile後,它將具備兩個特性:

1.保證此變數對所有執行緒的可見性,所謂「可見性」,,是指當乙個執行緒修改了這個變數的值,新值對於其他執行緒來說是可以立即得知的。(通過主記憶體,乙個執行緒修改了共享變數,新值立即同步到主記憶體,其他執行緒讀取該值時從主記憶體中拉取)

由於volatile變數只能保證可見性,在不符合以下兩條規則的運算場景中,我們仍然要通過加鎖來保證原子性。

(1)運算結果並不依賴變數的當前值,或者能夠確保只有單一的執行緒修改變數的值。

(2)變數不需要與其他的狀態變數共同參與不變約束(if(a>b)這種形式)

2.禁止指令重排序,進而保證有序性。j**a中天然的有序性可以總結為一句話:如果在本執行緒內觀察,所有的操作都是有序的;如果在乙個執行緒中觀察另乙個執行緒,所有的操作都是無序的。

3.保證long和double型別變數的原子性。

關鍵字 volatile關鍵字的作用

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...

關鍵字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...