問題タブ [mesi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
x86-64 - CPUストアバッファがデータの不整合を引き起こしている間、問題を修正する方法は?
x86-64 アーキテクチャでは、2 つのコアがあり、各コアには次のようなことを行うスレッドがあります: 共有値を比較して交換し (共有値が 0 の場合はテストし、1 に変更します)、次に別のことを行います。その後、単純なスピンロックのように、(ループ内で) 値を再び 0 に設定します。問題があります。core-1 が値を 1 に設定し、core-2 が待機中 (値をテスト) であり、次に core-1 が値を 0 に設定すると、CPU はタイムラインでそのようなことを行う可能性があります ( core-1 は val を 0 に設定します):
したがって、時間 0.5 でコア 1 が値を再度読み取った場合、新しいデータを取得できますが、コア 2 はまだダーティ データを取得しています。これは私の推測ですが、このように発生しますか? 「はい」の場合、問題を解決するにはどうすればよいですか? 私は、メモリバリアまたはロックバスが何か助けになるとは思わない.さらに、c++ 11 std::atomic 値にはそのような問題がありますか?