8

上の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

+1。 TILEについてはわかりませんが、ここで回答が得られなかった場合は、著者やカーネルのメーリングリストにメールを送信してみてください。 – Shahbaz

答えて

関連する問題