【发布时间】:2018-01-18 00:27:51
【问题描述】:
在阅读 this question 和 this(尤其是第二个答案)后,我对 volatile 及其与内存屏障相关的语义感到非常困惑。
在上面的例子中,我们写入了一个 volatile 变量,这会导致一个 mfence,进而将所有挂起的存储缓冲区/加载缓冲区刷新到主缓存,从而使其他缓存行无效。
但是,可以优化非易失性字段并将其存储在例如寄存器中吗?那么,我们如何确保写入 volatile 变量之前的所有状态更改都是可见的?如果我们改变 1000 件事情会怎样?
【问题讨论】:
标签: java multithreading concurrency volatile memory-barriers