LoadStore 屏障可以防止什么?

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

或者,我们什么时候需要

LoadStore
屏障?

根据Doug Lea

(LoadStore) 确保 Load1 的数据在与 Store2 相关的所有数据和后续存储指令刷新之前加载

所以,看来

load

的结果只能在
store完成后才能得到。 毕竟,直到商店完成前的最后一刻,
load
的结果都可能处于过时状态。
所以在我看来,这个障碍只适用于以下模式:

load r1 [x1]; // load operation #LoadStore barrier store [y1] r2; // store operation ... //other operations really need newest [x1] ...

这个例子正确吗?如果不对请指正。
另外,您能提供一下出现这种模式的具体情况吗?

我真的很感谢任何意见或建议。

multithreading assembly arm memory-barriers lock-free
1个回答
0
投票

设想一个“阅读副本更新”列表。 进程通过“加载”获取列表的当前版本,并“存储”该版本以将其保留在另一个结构或位置中。 完成后,该过程可以使用该版本的列表。

重要的一点是可以存在不同版本的内存。因此,“加载存储”模式需要考虑对同一内存执行访问的其他处理。 在这种情况下,版本的某些更新可能会导致不一致。

我认为还有很多其他模式。 例如,图 4 中 Algave 博士的论文

Herding Cats

有一些表格,您应该熟悉您引用的 Doug Lea 的 Java 内存模型页面。 具体来说,“R/W”用于负载缓冲(重复“R/W”排序)和其他模式,例如写入到读取因果关系。 如果您查看第 9 章,您可以找到对不同开源“C”程序的参考,这些程序使用“cbmc”扫描这些模式(似乎也已移植到 ebmc)。

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