アトミックな読み取り-変更-書き込み操作によるメモリ順序付け
C では、 x などのアトミックな読み取り-変更-書き込み (RMW) 操作.exchange() は、他のロードおよびストアに関して特定の順序保証を強制します。これらの操作が考慮されるかどうかという疑問が生じます:
標準パースペクティブ
C による標準では、RMW 操作は単一の操作として扱われます。これは、その単数形の名前と関連する文言によって暗示されています。
ARM64 実装
ARM64 では、RMW 操作はロード、アトミック交換、ストア命令のシーケンスとして実装されます。 。理論的には、この実装によりアトミック交換の前にストア命令が見えるようになりますが、これは標準のメモリ順序保証には影響しません。
メモリ同期
C でのメモリ同期これは主に、解放操作と取得操作の間の同期関係に基づいています。提供されたコード例:
同期分析
他に同期する操作がないため、次のシーケンスが発生します:
Possible Output
したがって、コードは実際に 0、1 を出力できます。標準の観点では、RMW 操作は追加の保証のない単一の操作であることが暗示されており、これが可能になります。出力。
以上がC のアトミックな読み取り、変更、書き込み操作は、取得、解放セマンティクスを備えた単一操作ですか、それともロードとストアのシーケンスですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。