相关疑难解决方法(0)

乱序执行和记忆围栏

我知道现代CPU可以无序执行,但是他们总是按顺序退出结果,如维基百科所述.

"Out of Oder处理器及时填写这些"插槽"并准备好其他指令,然后在结尾处重新排序结果,使其看起来正常处理指令. "

现在,当使用多核平台时,据说需要内存防护,因为由于乱序执行,可以在此处打印错误的x值.

Processor #1:
 while f == 0
  ;
 print x; // x might not be 42 here

Processor #2:
 x = 42;
 // Memory fence required here
 f = 1
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,由于乱序处理器(我假设MultiCore处理器的情况下的核心)总是按顺序退出结果,那么内存栅栏的必要性是什么.难道多核处理器的核心不会看到仅从其他核心退役的结果,或者它们是否也会看到正在进行中的结果?

我的意思是在我上面给出的例子中,当处理器2最终退出结果时,x的结果应该在f之前,对吗?我知道在乱序执行期间它可能在x之前修改了f,但它必须在x之前没有退役,对吗?

现在有了按顺序退出结果和缓存一致性机制,为什么你需要在x86中使用内存栅栏?

c cpu x86 memory-fences memory-barriers

10
推荐指数
2
解决办法
3033
查看次数

标签 统计

c ×1

cpu ×1

memory-barriers ×1

memory-fences ×1

x86 ×1