gpt4 book ai didi

c - 是否可以只在存储端使用内存屏障

转载 作者:太空狗 更新时间:2023-10-29 17:25:04 24 4
gpt4 key购买 nike

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

假设我有如下代码:

various stores
barrier
store flag
barrier

我希望能够从另一个 cpu 核心读取 flag 并得出结论,各种存储 已经执行并可见。是否可以在加载端不使用任何类型的内存屏障指令?显然,至少在某些 cpu 架构上是可能的,例如 x86,其中两个内核都不需要显式内存屏障。但是一般情况下呢?这是否可能因 cpu arch 的不同而有很大差异?

最佳答案

如果 CPU 对负载重新排序,您的代码将需要一个负载屏障才能正常工作。有很多架构可以进行这种重新排序;请参阅 Memory ordering 中的表格举一些例子。

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

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

关于c - 是否可以只在存储端使用内存屏障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26292827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com