在几个std :: atomic <t> </t>上的条件

时间:2013-02-23 15:50:10

标签: c++ multithreading c++11 atomic

在我的多线程应用程序中,我有一个可以简化为此示例的条件

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

显然,在条件之后,a和b可以保持不同的值。

在我的应用程序中,它认为,如果两个值同时为真,则它们不能再次改变状态。但在a.load()返回true后,即使在评估b.load()之前,它也可能会更改其值。

是否有优雅的解决方案用于原子评估此语句?显然锁定a.store(..)和b.store(..)的每个调用都可以在这里工作,但这远非好看。

1 个答案:

答案 0 :(得分:5)

您是否考虑过使用atomic<int>,并为bool设置位?这将允许您以原子方式查询。