彼の「原子兵器」に関する講演の中で, Herb Sutter は、メインスレッドがmemory_order_seq_cstを使用して停止フラグを設定し、複数のワーカースレッドがmemory_order_relaxedを使用してフラグをチェックする例を示しています。 Sutter 氏は、遅延の影響が無視できるため、チェックにmemory_order_relaxed を使用することが許容されると説明しています。ただし、彼は、特定の理由を示さずに、フラグを設定する操作にmemory_order_seq_cstを使用することを提案しています。
ここでは、メモリの順序の概念を理解することが重要です。メモリ順序は、アトミック操作によって提供される可視性と同期の保証を定義します。この例では、memory_order_seq_cst を使用してフラグを設定することで、次のことが保証されます:
読み込み操作でmemory_order_relaxedが使用されることを考えると、書き込み操作にmemory_order_seq_cstを使用するのは過剰に見えるかもしれませんが、実際にはパフォーマンスに重大な影響はありません。実装は、使用されるメモリ順序に関係なく、適切な時間内にアトミック ストアを可視にする必要があります。
書き込み操作に Memory_order_seq_cst を使用することによるレイテンシへの影響は最小限です。
結論として、停止フラグの設定には Memory_order_seq_cst を使用します。この例のフラグは、パフォーマンスの最適化のためではなく、正確さとスレッドの安全性を確保するためのものです。ロード操作にはmemory_order_relaxedを使用できますが、書き込み操作にmemory_order_seq_cstを使用すると、パフォーマンスを損なうことなく追加の保証が提供されます。
以上が`memory_order_relaxed` で確認する場合、なぜ `memory_order_seq_cst` を使用して停止フラグを設定するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。