のは、(私は、少なくとも願っています)我々はそれが正しいコードのこの部分を持っているとしましょう:ミックス原子と非アトミック変数とキャッシュ
std::atomic<int> a;
std::atomic<bool> ready{false};
void threadA() {
a.store(666, std::memory_order_relaxed);
ready.store(true, std::memory_order_release);
}
void threadB() {
while(!ready.load(std::memory_order_acquire));
process(a.load(std::memory_order_relaxed));
}
私の質問は:ケースでは、代わりにint a;
を使用していますstd::atomic<int> a;
の場合は正しいですか?または、キャッシュのフラッシング/無効化の問題がありますか?これは一例として、あなたのコードは大丈夫です、良いアイデアであるか否かは、
あなたが...尋ねるシーケンシャル一貫性を使用する必要がある場合です。あなたが何をやっているのか分かっていても、あなたのコードを管理している人は、ひどくコメントしカプセル化していない限り、そうではありません。 –
それは実際に特定の用途のためではありません。それは他の何かよりも理論のためです。 しかし、このコードは逐次整合性で動作しますか? –
それは私にはうまく見えます。私はあなたに「原子兵器」という講演会を見ることを勧めます。それ以降、私にはすべて意味がありました。 https://www.youtube.com/watch?v=c1gO9aB9nbs –