アトミック メモリ操作のコンテキストでは、std::atomic はシーケンシャル一貫性保証を提供します。その店舗運営。これは、std::atomic::store を使用して実行された書き込みは、同じ場所で実行される後続のメモリ操作から参照できることを意味します。
の実装順次一貫性を確保するための std::atomic::store は、通常、x86 および x86_64 アーキテクチャで XCHG 命令を使用します。この命令は、メモリ位置に格納されている値を新しい値に置き換えるアトミック交換操作を実行します。
メモリ バリアが後に続く単純なストア操作よりも XCHG がなぜ好まれるのかという疑問が生じます。通常のストアでは、データがメモリに書き込まれることは保証されますが、その書き込みが他のスレッドまたはプロセッサに表示されることは保証されません。 asm volatile("" ::: "memory") などのメモリ バリアは、プロセッサに保留中の書き込みバッファをフラッシュさせ、異なるプロセッサ間でメモリ操作を同期させます。
XCHG がシーケンシャル一貫性を実装するのに適切な選択肢であると考えられる理由はいくつかあります。 std::atomic::store:
XCHG は、std::atomic での順次一貫性を実現するための一般的な実装の選択肢です。 :store には、使用できる代替アプローチがあります。 1 つのオプションは、MOV 命令の後に MFENCE 命令を使用することです。 MOV は通常のストア操作を実行しますが、MFENCE は完全なメモリ バリアとして機能します。このアプローチは、特定の場合に一部のコンパイラで使用されます。
要約すると、 std::atomic::store で順次一貫性を保つために XCHG を使用すると、複数のスレッドとプロセッサにわたって書き込み操作が表示され、正しく順序付けされることを保証する、信頼性が高く効率的な方法が提供されます。
以上が逐次整合性を備えた `std::atomic::store` が x86 で XCHG を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。