Linuxカーネルプログラミングは初めてです。GUARANTEESの章にあるメモリバリアのドキュメントに混乱しています。
特定の CPU 内でオーバーラップするロードとストアは、その CPU 内で順序付けされているように見えます。
*X = c; d = *X;
CPU は以下のみを発行します。
STORE *X = c, d = LOAD *X
そして、その後の別の例:
オーバーラップするメモリアクセスはマージまたは破棄される可能性があると想定する必要があります。
*A = X; Y = *A;
次のいずれかを取得できます。
STORE *A = X; Y = LOAD *A; STORE *A = Y = X;
これらは同じように見えますが、2 つの例の違いは何ですか?