4

atomic_uintmemory_order_relaxed を使用した an の値の読み取りと、a の値の読み取りvolatile unsigned int(揮発性操作がアトミックであると仮定)の違いは何ですか?

具体的には、次のように定義しましょう。

解決策 1

  1. 「ライター」スレッドはatomic_uint(memory_order_relaxed から memory_order_seq_cst までの任意のメモリ順序修飾子を使用して) に書き込みます。
  2. 「リーダー」スレッドは、同じ上でアトミックなリラックスした読み取りを行いますatomic_uint

解決策 2

  1. 「ライター」スレッドは、volatile unsigned int
  2. 「リーダー」スレッドはその値を読み取ります

現状では、どちらの場合も、ライターによって書き込まれた値をリーダーが読み取る能力に関して何の保証も提供しないことを私は知っています。私が理解しようとしているのは、揮発性読み取りとリラックスしたアトミック読み取りの違いです。書き込み後の読み取りの一貫性を考慮するとき、一方が提供し、他方が提供しないものは何ですか?

私が見る唯一の違いは次のとおりです。

  • 揮発性操作はそれらの間で並べ替えることはできませんが、アトミックロードは他のアトミック操作で並べ替えることができます

他に何かありますか?

4

2 に答える 2