8

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

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

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

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

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

4

1 回答 1

1

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

于 2014-03-08T11:06:11.003 回答