在VarHandle中获取和释放内存顺序是什么意思

时间:2019-12-29 09:01:19

标签: java java-9

在VarHandle中获取和释放Memory Ordering是什么意思? 我可以看到以下说明,但不清楚其含义。

获取: 确保在此访问之前不对后续的加载和存储进行重新排序;与C / C ++ 11 memory_order_acquire排序兼容。

版本: 确保此访问后不会重新排序先前的装载和存储;与C / C ++ 11 memory_order_release排序兼容。

1 个答案:

答案 0 :(得分:0)

基本上,现代CPU可以无序执行指令以提高处理速度。但是,出于同步目的,您可能希望限制处理器的重新排序功能。那就是内存障碍的目的。

出于进一步解释的目的:

  • 加载-从内存中读取内容
  • Sotre-将某些内容写入内存

在JVM中,您会发现这四种类型的内存屏障:

  • #LoadLoad-该屏障之前的所有负载都需要在该屏障之后的负载之前发生
  • #LoadStore-该屏障之前的所有负载都需要在该屏障之后的商店之前发生
  • #StoreLoad-该屏障之前的所有存储都需要在此屏障之后的加载之前发生
  • #StoreStore-该屏障之前的所有存储都需要在此屏障之后的加载之前发生

获取记忆障碍可以看作是#LoadLoad#LoadStore障碍的组合,而释放障碍则是#LoadStore#StoreStore

有关更多说明,请参见本文:https://preshing.com/20120913/acquire-and-release-semantics/