c/c++中volatile關鍵字
1、沒有volatile關鍵字
#include "stdio.h"
void main(void)
b = i;
printf("%d\n",b);
getchar();
然後,在 debug 版本模式執行程式,輸出結果如下:
i = 10
i = 32
然後,在 release 版本模式執行程式,輸出結果如下:
i = 10
i = 10
2、使用volatile關鍵字
#include "stdio.h"
void main(void)
b = i;
printf("%d\n",b);
getchar();
分別在 debug 和 release 版本執行程式,輸出都是:
i = 10
i = 32
有些變數是用volatile關鍵字宣告的。當兩個執行緒都要用到某乙個變數且該變數的值會被改變時,
應該用volatile宣告,該關鍵字的作用是防止優化編譯器把變數從記憶體裝入cpu暫存器中。如果變數被裝入暫存器,
那麼兩個執行緒有可能乙個使用記憶體中的變數,乙個使用暫存器中的變數,這會造成程式的錯誤執行。
volatile的意思是讓編譯器每次操作該變數時一定要從記憶體中真正取出,而不是使用已經存在暫存器中的值
java 中volatile關鍵字
1.volatile關鍵字往往用於多執行緒,保證了執行緒可以正確讀取其他執行緒傳入的值。2.volatile的特殊規則保證了volatile變數值修改後的新值立刻同步到主記憶體,每次使用volatile變數前立即從主記憶體中重新整理,因此volatile保證了多執行緒之間的操作變數的可見性,而普通變...
java中關鍵字volatile
1.用在多執行緒同步變數時,執行緒為了提高效率,將某成員變數 如a 拷貝了乙份 如b 執行緒中對a的訪問其實訪問的是b。只在某些動作時才進行a和b的同步。因此存在a和b不一致的情況。volatile就是用來避免這種情況的。volatile告訴jvm,它所修飾的變數不保留拷貝,直接訪問主記憶體中的 也...
Java中volatile關鍵字
當多個執行緒操作共享資料時,執行緒先讀取記憶體中的資料,並各自快取乙份,然後對快取資料進行修改,最後再寫入到記憶體中,但有時候由於程式執行速度快 如while操作 導致沒有及時去記憶體中讀取新的資料,而此時有可能其它執行緒已經修改了共享的資料,這就可能導致程式執行出現不可想象的偏差,而volatil...