【发布时间】:2021-01-06 06:07:34
【问题描述】:
我想知道为什么需要内存屏障,我已经阅读了一些关于这个主题的文章。
有人说是因为 cpu 乱序执行,而others 说是因为缓存一致性问题导致存储缓冲区和队列无效。
那么,需要内存屏障的真正原因是什么? cpu乱序执行还是缓存一致性问题?或两者? cpu乱序执行和缓存一致性有关系吗? x86和arm有什么区别?
【问题讨论】:
-
这两者都没有具体关系。它们基本上会停止新事务并允许正在运行的事务完成以避免可能导致在特定系统设计中发生不希望/可预测的事情的竞争条件。允许您对处于已知状态的系统执行特定事务。
-
所有并行的事情都在正常进行,它基本上是受控的混乱,这将暂停混乱。就像停止交通以帮助一个缓慢/老人过马路,然后混乱可以继续。
-
一些系统会有单独的指令屏障和数据屏障来处理或隔离不同的区域。您需要它们的地方非常特定于系统,这并不意味着 x86 this 和 arm that 或缓存 this 和 pipeline that,但是这个特定的 x86 处理器,以这种方式实现的这个特定的 arm 核心在执行此操作之前需要一个屏障。并不是所有的 x86 处理器或 arm 内核都需要它在那个地方进行操作。它们用于防止潜在的竞争条件导致不良或不可预测的结果。
标签: x86 arm cpu-architecture cpu-cache memory-barriers