例如,在标准 C11 和 C++11 中,功能 6 类型的内存障碍:{ {3}}
这决定了编译器可以重新排序指令的方向,以及处理器指令需要插入哪些以限制处理器流水线中的重新排序。
例如,前五个障碍只影响编译器,但不生成任何CPU指令(无S/L/ MFENCE
),因为在x86中 - 自动提供了acquire-release-semantics。
Java中有多少种类型的内存屏障? 或者只有两种类型?
答案 0 :(得分:5)
Java语言或其标准库中没有明确指定的“内存障碍”。有一个基于“之前发生”关系的Java内存模型(JMM)。当然,JVM的实现使用一些内存障碍来实现JMM,但它们是特定于实现/硬件的。例如,见: http://gee.cs.oswego.edu/dl/jmm/cookbook.html 那篇文章定义了LoadLoad,LoadStore,StoreLoad,StoreStore抽象内存障碍(非标准,但是广泛使用的术语),并描述了如何在特定硬件上实现它们。