4

N3243 1.10.21 言う

ミューテックスと memory_order_seq_cst 操作を正しく使用してすべてのデータ競合を防ぎ、他の同期操作を使用しないプログラムは、構成スレッドによって実行される操作が単純にインターリーブされているかのように動作し、オブジェクトの各値の計算がスレッドから取得されることを示すことができます。そのインターリーブでのそのオブジェクトへの最後の副作用。これは通常、「順次整合性」と呼ばれます。

これは、アトミック オブジェクトに対するseq_cstの書き込みは、 seq_cst順序付けでアトミック オブジェクトを読み取る他のスレッドからすぐに見えるということですか?

4

1 に答える 1

7

いいえ、C++ 標準には、即時の可視性を保証するものは何もありません。

アトミック書き込みは、「合理的な」期間内に他のスレッドから見えるようになるべきですが、即時である必要はなく、「合理的」の正確な定義はありません。

保証されているのは、操作の順序が 1 つだけであるということですmemory_order_seq_cst。したがって、書き込まれた値が表示されない読み取りは、その合計順序で書き込みよりも早く発生する必要があります。この全体的な順序にはすべての変数とすべての操作が含まれるため memory_order_seq_cstスレッド間に何らかの通信がある場合、書き込みはかなり迅速に可視化される必要があります。

于 2013-02-13T10:48:31.587 に答える