4

私のマルチスレッド アプリケーションには、この例に還元できる条件があります。

std::atomic<bool> a, b;
// ...
if ( a.load() && b.load() )
{
   // ...
}

明らかに、条件の直後に、a と b は異なる値を保持できます。

私のアプリケーションでは、両方の値が同時に true の場合、状態を二度と変更できないと考えています。ただし、a.load()返さtrueれた後、評価される前でも値が変わる可能性がありますb.load()

このステートメントを原子的に評価するためのエレガントなソリューションはありますか? 明らかに、a.store(..) と b.store(..) のすべての呼び出しをロックすることはここで機能しますが、それは素晴らしいとは言えません。

4

1 に答える 1

5

atomic<int>代わりにを使用し、ブール値のビットを設定することを検討しましたか? これにより、両方をアトミックにクエリできます。

于 2013-02-23T15:52:21.510 に答える