Volatile關鍵字總結

2021-10-05 22:35:22 字數 353 閱讀 3380

執行緒間可見和禁止指令重排。

volatile的執行緒間可見是cpu級別的,起作用的是mesi (cpu快取一致性協議).

出現的問題:

執行緒間的不可見性:

物件在堆記憶體中,執行緒想要訪問物件,那物件所在的區域叫共享記憶體,執行中的執行緒的這塊區域叫做工作記憶體,每個執行緒都有一塊自己的工作記憶體.執行緒訪問物件,把物件內的資料copy到自己的工作記憶體內.

執行緒1先訪問物件,執行緒2後訪問物件,這時執行緒1改掉了成員變數a的值,但執行緒2的工作記憶體中a的值還是訪問時的資料,這就造成了資料不一致.

當物件中被volatile修飾的成員變數a發生變化時,將會強制所有執行緒重新去堆記憶體中讀取a的值.

volatile關鍵字的特性總結

當乙個變數定義為volatile後,它將具備兩個特性 1.保證此變數對所有執行緒的可見性,所謂 可見性 是指當乙個執行緒修改了這個變數的值,新值對於其他執行緒來說是可以立即得知的。通過主記憶體,乙個執行緒修改了共享變數,新值立即同步到主記憶體,其他執行緒讀取該值時從主記憶體中拉取 由於volatil...

關鍵字 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的位址中找出...