0

我理解为什么需要内存屏障,但在单处理器的情况下我不明白。

即使使用 UP,我也必须处理障碍吗?每个文档都使用 SMP 而不是 UP 来解释它们。

在下面的代码中,有没有可能r2 == 0在 a 点?

// the location 0xdeadbeef has a zero initial value
ldr r0, =0xdeadbeef
ldr r1, =0xdeadbeef
ldr r2, =1
str r2, [r0]
ldr r2, [r1]
// point a
4

2 回答 2

2

有内存屏障和编译器屏障。

单个处理器不需要内存屏障(我不确定超线程是否算作多个处理器),但编译器屏障是 - 编译器可以在不同的线程中重新排序代码,这样你就失败了。

于 2012-09-21T22:10:53.423 回答
0

内存屏障只能用于“全局变量”。因为本地(在堆栈中)和寄存器在线程切换时会自动保存。

可能普遍性比假设你总是处理 UP 更好

于 2012-03-08T08:38:56.797 回答