volatile關鍵字的作用,以及效能問題

2021-10-10 22:11:27 字數 663 閱讀 1721

volatile關鍵字的作用:

1、保證修飾的屬性具有可見性

2、可以禁止指令重排序,從而實現了有序性

有序性:

cpu為了提高執行效率,在執行機器指令時可能會發生亂序的情況。在單核cpu中**順序與機器指令順序的不一致不會導致結果變化。但是在多核cpu中則會出現資料不安全的情況。主要是因為多個cpu在併發情況下處理資料時,編譯器對機器指令進行了順序調優,乙個執行緒獲取的值可能為另乙個執行緒亂序執行得出的值。(一句**可能會編譯出多句機器指令)

使用volatile可以禁止指令重排序。轉換成機器指令的話,會發現有乙個lock字首,就是對它的讀寫操作加了「記憶體屏障」,對這個變數的所有操作都執行完後,再同步到記憶體中,期間不允許其他的指令執行,所以說是形成了記憶體屏障。

效能問題

volatile的同步機制確實優於鎖,(synchronized關鍵字或是juc包中的鎖)但是由於虛擬機器進行了許多優化公升級,我們也並不能認為volatile比鎖快多少。

首先,volatile修飾的變數進行讀操作與普通變數幾乎沒什麼差別,但是寫操作相對慢一些,因為它需要在本地**中插入很多記憶體屏障來保證指令不會發生亂序執行,但是開銷總是比鎖要小。對於synchronized和volatile的選擇,一般看volatile的語義能否滿足使用場景的需求。

關鍵字 volatile關鍵字的作用

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

volatile關鍵字作用

1.阻止編譯器對 進行優化。即讀取某個變數值時,不從暫存器中讀取而是從變數裡讀。2.編譯器的優化 在本次執行緒內,當讀取乙個變數時,為提高訪問速度,編譯器優化時有時會先把變數讀取到乙個暫存器中 以後再取變數值時,就直接從暫存器中取值 當變數值在本執行緒裡改變時,會同時把變數的新值copy到該暫存器中...

volatile關鍵字的作用

在c c 語言中經常會遇到volatile關鍵字,它的字面意思是 可變的 不穩定的 volatile 會影響編譯器編譯的結果,被volatile修飾的變數是隨時可能發生變化的,編譯器對volatile變數有關的運算,不進行編譯優化,以免出錯,vc 在產生release版可執行碼時會進行編譯優化,加v...