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

Multithreading TILE Gx上的内存障碍和Linux内核自旋锁,multithreading,linux-kernel,memory-barriers,memory-model,tilera,Multithreading,Linux Kernel,Memory Barriers,Memory Model,Tilera,在TILE Gx体系结构的Linux内核自旋锁实现中,看起来它们在锁定时(仅在解锁时)不会发出任何内存障碍: 然后我不明白为什么指令不能在锁定之上重新排序,这会导致程序员认为在持有锁时执行的指令在获得锁之前实际执行 其他体系结构似乎至少有一个编译器障碍: 手臂的旋转锁有一个记忆屏障: 谨此陈辞: x86的自旋锁有一个编译器障碍: 谨此陈辞: 为什么TILE Gx不同?我认为它的记忆模型和ARM的记忆模型一样弱。为什么它们甚至没有编译器屏障呢?锁定函数arch\u spin\u lo

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

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

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

  • 手臂的旋转锁有一个记忆屏障:

    谨此陈辞:

  • x86的自旋锁有一个编译器障碍:

    谨此陈辞:


为什么TILE Gx不同?我认为它的记忆模型和ARM的记忆模型一样弱。为什么它们甚至没有编译器屏障呢?

锁定函数
arch\u spin\u lock
使用
arch\u spin\u lock\u slow
,后者反过来使用
cmpxchg
cmpxchg
的实现包括一个内存屏障指令(参见)。

+1用于研究。我不知道,但是如果你在这里没有得到回复,你也可以试着发邮件给作者,或者内核邮件列表。
A memory barrier is required after we get a lock, and before we 
release it, because V6 CPUs are assumed to have weakly ordered 
memory.
barrier();     /* make sure nothing creeps before the lock is taken */