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