4

「ネイティブ」CPU インテグラルの追加オーバーヘッドの理由はわかりませんが、間違っている可能性があるため、コミュニティの意見を聞きたいと思います

私の本当の問題は、比較的めったに変更されないが、頻繁に読み取られるある種のリンクされたリストに関するものです (典型的な RCU の使用例に似ています)。アイデアは、読み取り専用操作に 2 つのアクセス モードを提供することです。最初のモードは、構造が現在変更されている場合 (本格的なロック フリー アルゴリズム) に使用され、2 番目の軽量モードは、「落ち着いた」場合 (非アトミック リスト トラバーサル) に使用されます。2 番目の (軽量) ケースでは、memory_order_relaxed でアトミック ロードを使用しますが、コストが高すぎる場合は、いくつかの回避策を実行する必要があります (非アトミック変数にアトミック値をキャッシュするか、提案された何らかの方法でエミュレートします memory_order_nonatomic http ://www.open-std.org/jtc1/sc22/wg14/www/docs/n1446.htmなど)

答えはアトミック実装(およびCPU)に依存することを理解していますが、実装が合理的に動作することを願っています:)

4

1 に答える 1

5

memory_order_relaxedモデルは、ストア/ロード操作の並べ替えを許可するだけですが、アトミックな読み取り/書き込みを強制します。一部の CPU アーキテクチャでは、バスのロック、キャッシュのフラッシュなどにつながります。したがって、一般的に答えは「はい」memory_order_relaxedです。アトミック アクセスは、非アトミック アクセスよりも高価であると見なされます。

于 2012-09-07T09:15:52.203 に答える