我理解为什么需要内存障碍,但我不知道单处理器的情况。
即使我使用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
答案 0 :(得分:2)
存在内存障碍和编译器障碍。
单个处理器不需要内存屏障(我不确定超线程是否算作多处理器)但是编译器障碍是 - 编译器可以在不同的线程中重新排序代码,以免失败。
答案 1 :(得分:0)
内存障碍必须仅用于“全局变量”。因为在切换线程时会自动保存本地(堆栈中)和寄存器。
可能普遍性胜过假设你总是处理UP