記volatile關鍵字使用時遇到的問題

2021-10-05 21:22:18 字數 473 閱讀 2663

volatile詳解

實現了以下**

問題出現了!

執行環境:android 5.1

按照文章描述,flag沒有加volatile關鍵字,理論上不會列印「有點東西」,可是竟然列印了,我很費解,查詢資料,

問技術大佬,可是得到的結果跟我看到的並不一樣。

根據這一點,我搜尋了一下,終於找到了答案。

結論:volatile能保證可見性, 不代表沒有volatile就不具備可見性, 後者是未定義行為.volatile規定了一定要重新整理

變數,從主記憶體中獲取最新的值。 沒有volatile,虛擬機器或編譯器可以自由優化,可以馬上重新整理,

也可以等會兒重新整理,也可永不重新整理。

面試官沒想到乙個volatile,我都能跟他扯半小時

volatile關鍵字的使用

volatile提醒編譯器它後面所定義的變數隨時都有可能改變,因此編譯後的程式每次需要儲存或讀取這個變數的時候,都會直接從變數位址中讀取資料。如果沒有volatile關鍵字,則編譯器可能優化讀取和儲存,可能暫時使用暫存器中的值,如果這個變數由別的程式更新了的話,將出現不一致的現象。下面舉例說明。經常...

volatile關鍵字的使用

msdn手冊中對volatile關鍵字的解釋 大概的翻譯 volatile關鍵字是乙個型別限定符,用於宣告乙個物件可以通過其他語句 例如作業系統 硬體或併發執行的執行緒 在程式中進行修改。volatile關鍵字的兩個功能 1 防止編譯器對彙編指令做順序上的優化。2 防止暫存器儲存變數的副本值。應用在...

關鍵字 volatile關鍵字的作用

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