Anthony Williams によるC++ Concurrency in Actionを読んでいます。現在、私は彼がmemory_order_consumeについて説明している時点で.
そのブロックの後にあります:
メモリの順序付けの基本について説明したので、次はより複雑な部分を見ていきます。
私はいくつかのことを完全には理解していないので、少し怖いです:
dependency-ordered-before とsynchronizes-with の違いは? どちらも事前発生関係を作成します。正確な違いは何ですか?
次の例について混乱しています:
int global_data[]={ … };
std::atomic<int> index;
void f()
{
int i=index.load(std::memory_order_consume);
do_something_with(global_data[std::kill_dependency(i)]);
}
kill_dependency は正確に何をしますか? それはどの依存関係を殺しますか?どのエンティティ間で? そして、コンパイラはその知識をどのように活用できるのでしょうか?
memory_order_consume のすべての発生を安全に memory_order_acquire に置き換えることができますか? つまり、あらゆる意味でより厳格ですか?
リスト 5.9 で、安全に置き換えることができますか?
std::atomic<int> data[5]; // all accesses are relaxed
と
int data[5]
? つまり、取得と解放を使用して、非アトミック データへのアクセスを同期できますか?
彼は、キュービクルにいる男性を例に、リラックス、取得、解放について説明しています。seq_cst と consumer の同様の簡単な説明はありますか?