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

Concurrency 内存屏障仅在SMP中有意义吗?,concurrency,atomic,memory-barriers,Concurrency,Atomic,Memory Barriers,我理解为什么需要内存屏障,但我不理解单处理器的情况 即使我用完了,我也要面对障碍吗?每个文档都用SMP来解释它们,但不是UP 在以下代码中,点a中是否存在r2==0的可能性 // 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 内存屏障只能用于“全局变量”。因为本地(堆栈

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

即使我用完了,我也要面对障碍吗?每个文档都用SMP来解释它们,但不是UP

在以下代码中,点a中是否存在
r2==0
的可能性

// 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

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


可能是普遍性比假设总是要处理内存障碍和编译器障碍要好


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

可能与超标量无序单处理器相关。它确实应该由处理器的内存模型和指令集指定。(邪恶在于细节)。@Basile:我不这么认为-铁的规则是在单个处理器上执行单个线程总是有因果关系。