在VarHandle中获取和释放Memory Ordering是什么意思? 我可以看到以下说明,但不清楚其含义。
获取: 确保在此访问之前不对后续的加载和存储进行重新排序;与C / C ++ 11 memory_order_acquire排序兼容。
版本: 确保此访问后不会重新排序先前的装载和存储;与C / C ++ 11 memory_order_release排序兼容。
答案 0 :(得分:0)
基本上,现代CPU可以无序执行指令以提高处理速度。但是,出于同步目的,您可能希望限制处理器的重新排序功能。那就是内存障碍的目的。
出于进一步解释的目的:
在JVM中,您会发现这四种类型的内存屏障:
#LoadLoad
-该屏障之前的所有负载都需要在该屏障之后的负载之前发生#LoadStore
-该屏障之前的所有负载都需要在该屏障之后的商店之前发生#StoreLoad
-该屏障之前的所有存储都需要在此屏障之后的加载之前发生#StoreStore
-该屏障之前的所有存储都需要在此屏障之后的加载之前发生获取记忆障碍可以看作是#LoadLoad
和#LoadStore
障碍的组合,而释放障碍则是#LoadStore
和#StoreStore
。
有关更多说明,请参见本文:https://preshing.com/20120913/acquire-and-release-semantics/