在VarHandle中获取和释放内存顺序的含义是什么

问题描述 投票:2回答:1

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

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

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

java java-9
1个回答
0
投票

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

出于进一步说明的目的:

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

在JVM中,您将找到这四种类型的内存屏障:

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

获取内存屏障可以看作是#LoadLoad#LoadStore屏障的组合,而释放屏障是#LoadStore#StoreStore

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

© www.soinside.com 2019 - 2024. All rights reserved.