在我读过的一些.net文档中,这是编译器处理易失性的方式:
- *“从 volatile 读取或使用 Thread.VolatileRead 方法在逻辑上是一个获取栅栏”
- “写入 volatile 或使用 Thread.VolatileWrite 方法在逻辑上是一个释放栅栏” *
这些围栏适用于编译器和架构级别。
当然,VC++ 的主要区别在于栅栏仅适用于编译器级别。
所以我的问题是,Java 中 volatile 的内存重新排序预防语义是什么?
转换:
栅栏 = 屏障 屏障 = 栅栏
参考:
Joe Duffy(Windows 上的并发编程)