Java中有多少种类型的内存屏障?

Ale*_*lex 4 java concurrency multithreading java.util.concurrent

例如,在标准C11C++ 11中,有6种类型的内存屏障:http://en.cppreference.com/w/cpp/atomic/memory_order

  • memory_order_relaxed
  • memory_order_consume
  • memory_order_acquire
  • memory_order_release
  • memory_order_acq_rel
  • memory_order_seq_cst

哪些是确定编译器可以重新排序指令的方向,以及哪些处理器指令需要插入以限制处理器的流水线中的重新排序.例如,前五个障碍仅影响编译器,但不生成任何CPU指令(否S/L/ MFENCE),因为在x86中 - 自动提供acquire-release-semantics.

Java中有多少种类型的内存屏障?或者只有两种类型?

  • 允许所有重新排序
  • 禁止所有重新排序

Ana*_*lyG 5

Java语言或其标准库中没有明确指定的"内存障碍".有一个基于"之前发生"关系的Java内存模型(JMM).当然,JVM的实现使用一些内存障碍来实现JMM,但它们是特定于实现/硬件的.参见例如:http: //gee.cs.oswego.edu/dl/jmm/cookbook.html该文章定义了LoadLoad,LoadStore,StoreLoad,StoreStore抽象内存障碍(非标准,但广泛使用的术语)并描述了如何它们可以在特定硬件上实现.