3

2 つのスレッド間で共有されるアトミックでの「前に起こる」順序付けについて説明していただけますか? スレッド "Read" とスレッド "write" を考えてみましょう。どちらもアトミック ブール変数 x を共有しています。読み取りスレッドは単に x の値を読み取り、書き込みスレッドは単純に値を x に書き込みます。スケジューラがこれらのスレッドを任意の順序で実行できることを考えると、C++ はどのようにして 2 つのスレッド間で順序の一貫性を保証するのでしょうか?

4

1 に答える 1

2

ルールは、あるスレッドがアトミック変数に書き込み、別のスレッドがその変数読み取り、書き込まれた値を確認する場合、先行発生関係があるということです。つまり、原子変数への書き込みの前に最初のスレッドで書き込まれた値は、原子変数を読み取って書き込まれた値を確認した後、2 番目のスレッドに表示されることを意味します。

同期にアトミック変数を使用するには、次のようにする必要があります。

int i = 0;
atomic<bool> ready;

// thread 1:
i = 3;
ready = true;

// thread 2:
while (!ready)
    ;  /* busy wait */
std::cout << i << '\n'; // writes "3" to cout
于 2013-01-18T19:05:23.313 に答える