在我的多线程应用程序中,我有一个可以简化为此示例的条件
std::atomic<bool> a, b;
// ...
if ( a.load() && b.load() )
{
// ...
}
显然,在条件之后,a和b可以保持不同的值。
在我的应用程序中,它认为,如果两个值同时为真,则它们不能再次改变状态。但在a.load()
返回true
后,即使在评估b.load()
之前,它也可能会更改其值。
是否有优雅的解决方案用于原子评估此语句?显然锁定a.store(..)和b.store(..)的每个调用都可以在这里工作,但这远非好看。
答案 0 :(得分:5)
您是否考虑过使用atomic<int>
,并为bool设置位?这将允许您以原子方式查询。