Android學習筆記——volatile詳解


volatile特性

可以把對volatile變量的單個讀/寫,看成是使用同一個鎖對這些單個讀/寫操作做了同步

可以看成

 

 

所以volatile變量自身具有下列特性:

可見性。對一個volatile變量的讀,總是能看到(任意線程)對這個volatile變量最后的寫入。

原子性:對任意單個volatile變量的讀/寫具有原子性,但類似於volatile++這種復合操作不具有原子性。

volatile雖然能保證執行完及時把變量刷到主內存中,但對於count++這種非原子性、多指令的情況,由於線程切換,線程A剛把count=0加載到工作內存,線程B就可以開始工作了,這樣就會導致線程AB執行完的結果都是1,都寫到主內存中,主內存的值還是1不是2。

 

 

volatile的實現原理

volatile關鍵字修飾的變量會存在一個“lock:”的前綴。

Lock前綴,Lock不是一種內存屏障,但是它能完成類似內存屏障的功能。Lock會對CPU總線和高速緩存加鎖,可以理解為CPU指令級的一種鎖。

同時該指令會將當前處理器緩存行的數據直接寫會到系統內存中,且這個寫回內存的操作會使在其他CPU里緩存了該地址的數據無效。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM