【问题标题】:VarHandle memory semantics understanding -> VisibilityVarHandle 内存语义理解 -> 可见性
【发布时间】:2019-06-27 08:33:35
【问题描述】:

通过内存语义和模型,我们通过指令重新排序和围绕屏障的缓存刷新/更新来理解它。在 Java 的 Varhandle 类中,他们引入了许多内存语义,但很少解释它到底是做什么的?我有以下问题和需要澄清 ->

a) 简单的 set 和 get 就像正常的内存访问一样,没有内存排序限制,也没有可见性保证??? b)不透明的内存语义->它到底是做什么的?它是一个简单的内存读写到主内存(不涉及缓存),没有任何内存排序限制吗???文档说->它保证单个线程对相同变量的有序访问。 c) 获取/释放和易失性之间的区别??

谢谢

【问题讨论】:

  • 请考虑对每个问题提出一个问题。不是 4 或 5。

标签: java shared-memory java-memory-model


【解决方案1】:

这是我从以下文档中得到的 -> http://gee.cs.oswego.edu/dl/html/j9mm.html Acquire/Release versus Sequentially Consistent memory order

a) 普通模式 -> 只有原始和引用 get 和 set 是原子的,允许所有排序并且没有缓存刷新。 b) 不透明 -> 保证程序顺序线程间只有一个变量的可见性。不保证/约束其他变量可见性线程间 c) Acquire/Release -> 相同变量的完整订单保证加上发生在保证之前。获取时缓存是否无效,释放时是否刷新缓存 d) 易失性 -> 对所有易失性变量进行完全有序的内存访问。完全符合程序订单的预期。

【讨论】:

  • 文档说:“将变量的值设置为 newValue,按照程序顺序,但不保证相对于其他线程的内存排序效果。”
猜你喜欢
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2020-08-29
  • 2016-03-29
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多