内存屏障只在SMP中有意义吗?

时间:2012-03-08 08:25:43

标签: concurrency atomic memory-barriers

我理解为什么需要内存障碍,但我不知道单处理器的情况。

即使我使用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

2 个答案:

答案 0 :(得分:2)

存在内存障碍和编译器障碍。

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

答案 1 :(得分:0)

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

可能普遍性胜过假设你总是处理UP