java volatile的 store load相關指令


 

java中的volatile,從網上很多資料來看,保證了被修飾變量的可見性以及有序性

對於這個有序性,是通過編譯時候生成對應的內存屏障來保證不會被重排序。而這個內存屏障對應的指令碼有以下4中:

storestore, storeload, loadload, loadstore

這種xy形式的指令,其語義如下:在xy之前的x操作,不能與xy之后的y操作進行重排序。

但是具體是怎么保障其讀寫的有序性的,好像沒有一個固定的加屏障的模式,看了網上的答案,也沒有給出准確的描述。

估計是根據實際的指令來加上對應的內存屏障。

 

附注:

  對於store操作,其屏障如何加,是否該操作的前后的所有store和load都不能進行重排序,還是部分不能重排序?

  同理,對於load操作,是否加的屏障是這樣的:保證該操作不能與前后的所有store和load進行重排序呢?

  沒搞明白。使用上是沒問題,但是原理還是有點模糊。

  但至少可以確定的是,對於同樣用volatile修飾的兩個變量,無論是load還是store都不能進行重排序。

 

 參考鏈接:

  https://www.jianshu.com/p/2ab5e3d7e510

  https://www.jianshu.com/p/a67dc1c11088

  https://www.jianshu.com/p/43af2cc32f90

  https://blog.csdn.net/hqq2023623/article/details/51013468

 

  http://gee.cs.oswego.edu/dl/jmm/cookbook.html

 


免責聲明!

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



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