volatile關鍵字介紹

2021-10-09 07:51:16 字數 659 閱讀 1691

1、當乙個變數被定義為volatile時,這個變數對所有執行緒是可見的,就是說當乙個執行緒修改了這個變數時,其他執行緒讀取到的永遠是修改後的最新的值。

但不能因為這樣就說基於volatile變數的運算在併發下是安全的,比如多個執行緒對乙個資料進行++操作時:當前執行緒讀取到的是最新的值,但是在它對資料進行++時,別的執行緒可能也對此時的資料進行了++操作,這就導致當前執行緒的++操作是無效的。

2、volatile關鍵字還能禁止指令重排序列化。

例如:指令1把a的值加10,指令2把a的值乘2,指令3把b的值加1。因為指令1和2有依賴關係,所以他們不會重排序,但指令3在執行的時候可能排到1之前或者1和2的中間。

3、使用volatile關鍵字要比其他同步工具更快。

volatile進行讀操作時效能消耗跟普通變數幾乎沒有什麼差距,但是寫操作可能會慢一些,因為它需要在本地**中插入記憶體屏障指令來禁止重排序。即便如此,它的效能消耗大多數情況下也要比鎖低

使用volatile關鍵字需要滿足的條件:

1、寫入變數時並不依賴變數的當前值,或者能確保只有單一執行緒修改變數的值

2、變數不需要與其他狀態變數共同參與不變約束

3、訪問變數時,沒有其他原因需要加鎖

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