読み込みがプログラム順序で見えることを保証します。保持している可能性があります。見える保証はありません。読み込み/書き込みバリアを入れると、正しく動作するようになります。異なる状況のために異なる種類のバリアがあります。コードのメンテナンス性が犠牲になります。間違った種類の操作を用い、不可思議なバグを発生させる可能性があります。多くのアトミック操作ではバリアが必要なときにはフルバリア命令を使用しています。バリアについて覚えておくべき重要なことは、順序を定義するものだということです。一連の動作を発生させる「フラッシュ」命令だと考えてはいけません。コアが行う操作に対する、時間的な分割線だと考えてください。単一の命令であるかのように必ず振る舞うことを保証します。つのスレッドで同時に実行することを考えてみましょう。加え、そして書き戻します。なることが保証されます。どちらかになることが保証されています。いう、バイト列が中途半端に混ざるようなことはありません。データの境界が合っていなければ、アトミック性の保証は失われます。上半分と下半分が別々に更新されるところが他のコアから見える可能性があります。ドキュメントで述べられています。特別な読み書き命令が使用された場合は除きます。この動作を理解することは重要です。ビットの「アトミック読み込み」や「アトミック書き込み」の関数は不要です。完全を期すためそれらが提供されていたとしても、それは単に普通の読み書きを行うだけです。命令として知られています。データを読み込み、その値に何らかの変更を行い、そして書き戻すわけです。呼ばれる技法を使います。その物理メモリアドレスに紐付いた予約を確立します。この予約は、他のコアがそのアドレスに書き込みを行おうとすると、失効します。条件付き書き込み命令を使ってデータの書き戻しを試みます。予約が未だ有効であれば、書き込みは成功します。失効していれば、失敗します。割り込まれることなく成功するまで、繰り返します。それは正しく動作しないであろう、ということも、ここで述べておく価値があるでしょう。その操作は実際にはアトミックに行われないでしょう。環境でも同様にアトミックであることが保証されています。操作はメモリバリアを張る、と解釈するべきではありません。おいては、アトミックにはメモリバリアの効果はありません。アトミックな操作とアトミックでない操作を混ぜたとき、その順序に関する保証はありません。バリアとアトミック操作をペアにして一緒に使うのは意味のあることです。次の節では、このことについて、より詳細に述べます。アトミックとバリアをペアで使ういつも通り、例を示しながら議論を進めるのがいいでしょう。呼ばれる、簡単な相互排他の仕組みについて考えます。