volatile關鍵字的用法

2021-09-24 13:27:01 字數 1207 閱讀 1218

這裡一共有main執行緒和new出來的兩個執行緒,兩個執行緒中各自有自己的快取,

如果沒有volatile的話,每次都一般只會從自己的執行緒的緩衝區裡面拿值,所有main改變了也沒什麼用,而加了volatile的值一旦發生改變,存有running值的執行緒會自動被提示

該值已過期,就會再從主線程裡面重新獲取running,

public

class

testvolatile

system.out.

println

("e end!");

}public

static

void

main

(string[

] args)

catch

(interruptedexception e)

t.running=

true;}

}

不過volatile 並不能保證多個執行緒共同修改變數時所帶來的不一致問題

乙個執行緒從主線程的記憶體中讀到0,加一,與此同時另乙個執行緒也讀到了0,因為有volatile,所以volatile所以主線程的count變為1,而另乙個執行緒將1也放到主線程中,只會覆蓋原有的1,所以執行了兩個執行緒只加了1,

public

class

testvolatile

public

static

void

main

(string[

] args)

threads.

foreach

((o)

->o.

start()

);threads.

foreach

((o)

->

catch

(interruptedexception e)})

; system.out.

println

(t.count);}

}

count++不具備原子性。可以用synchornized或者atomicinteger解決

atomicinteger count=

newatomicinteger(0

);// volatile int count=0;

voidm(

)

關鍵字 volatile關鍵字的作用

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

c中volatile關鍵字的用法

好吧,以前都沒怎麼注意有這個關鍵字 c作為中級語言,和底層有很多的聯絡,那麼有必要熟悉volatile的用法。volatile 影響編譯器編譯的結果,指出,volatile 變數是隨時可能發生變化的,與volatile變數有關的運算,不要進行編譯優化,以免出錯,vc 在產生release版可執行碼時...

C語言中volatile關鍵字用法

介紹volatile關鍵字之前我們先了解一下編譯器的優化。快取記憶體 處理器讀取程式裡面的資料時,把一些訪問頻率比較高的資料,臨時儲存到暫存器 register 中,當需要取資料時,就會從 register 中取,而不是直接去從 memory 記憶體 中取,節約了時間,像這樣的過程,叫做快取記憶體。...