上のLinuxカーネルスピンロック(ロック解除時のみ)、ロック時に、彼らは任意のメモリバリアを発行しないように、それが見えます:メモリバリアとTILE-Gxとアーキテクチャ用のLinuxカーネルスピンロックの実装ではTILE-Gxを
https://github.com/torvalds/linux/blob/master/arch/tile/include/asm/spinlock_64.h
次に、ロックを保持している間にプログラマによって実行されると思われる命令が実際にロックが実行される前に実行されるロックを超えて命令を並べ替えることができないのはなぜですか?
:コメント付き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.
https://github.com/torvalds/linux/blob/master/arch/arm/include/asm/spinlock.h
:
ARMのスピンロックは、メモリバリアがあります。
他のアーキテクチャは、少なくともコンパイラの障壁を持っているように見えます
とx86のスピンロックコンパイラの障壁があります
コメント付きhttps://github.com/torvalds/linux/blob/master/arch/x86/include/asm/spinlock.h
:
barrier(); /* make sure nothing creeps before the lock is taken */
なぜTILE-Gxが違うのですか?私は、そのメモリモデルがARMのメモリモデルほどには弱いと思っていました。コンパイラの壁がないのはなぜですか?
+1。 TILEについてはわかりませんが、ここで回答が得られなかった場合は、著者やカーネルのメーリングリストにメールを送信してみてください。 – Shahbaz