TILE-Gx上的内存障碍和Linux内核自旋锁

时间:2013-12-12 17:14:44

标签: multithreading linux-kernel memory-barriers memory-model tilera

在TILE-Gx架构的Linux内核自旋锁实现中,看起来它们在锁定时不会发出任何内存障碍(仅在解锁时):

https://github.com/torvalds/linux/blob/master/arch/tile/include/asm/spinlock_64.h

然后我不明白为什么指令不能在锁定之上重新排序,这会导致程序员在保持锁定时执行相同的指令,在锁定之前实际执行?

其他架构似乎至少有编译器障碍:

为什么TILE-Gx不同?我认为它的内存模型和ARM的内存模型一样弱。为什么他们甚至没有编译屏障?

1 个答案:

答案 0 :(得分:1)

锁定功能arch_spin_lock使用arch_spin_lock_slow,后者又使用cmpxchgcmpxchg的实现包括内存屏障指令(参见http://lxr.free-electrons.com/source/arch/tile/include/asm/cmpxchg.h)。