是否可以仅在存储端使用内存屏障

时间:2014-10-10 05:58:18

标签: c assembly cpu-architecture memory-barriers

首先,一些上下文:我使用的是基于in-asm的前CST原子模型,但出于这个目的,我很乐意忽略C方面(以及任何编译器障碍问题,我可以单独处理)并认为它基本上只是一个asm / cpu架构问题。

假设我的代码如下:

various stores
barrier
store flag
barrier

我希望能够从另一个cpu核心读取flag并得出结论various stores已经执行并且可见。是否有可能在加载端没有任何类型的内存屏障指令?显然,至少在某些cpu架构上是可能的,例如x86,其中任何一个核心都不需要显式内存屏障。但总的来说呢? cpu arch是否可以广泛地改变它?

1 个答案:

答案 0 :(得分:3)

如果CPU要对负载进行重新排序,则代码需要加载障碍才能正常工作。有很多架构可以进行这种重新排序;有关示例,请参阅Memory ordering中的表格。

因此,在一般情况下,您的代码确实需要加载障碍。

x86不是很典型,因为它提供了非常严格的内存排序保证。有关讨论,请参阅Who ordered memory fences on an x86?