彼の「原子兵器」の講演では、 Herb Sutter は、メインスレッドがmemory_order_seq_cstを使用して停止フラグを設定し、複数のワーカースレッドがmemory_order_seq_cstを使用してフラグをチェックする例を示しています。メモリ_オーダー_リラックス済み。 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を使用すると、パフォーマンスを損なうことなく追加の保証が提供されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3