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