4

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

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

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

在我的应用程序中,它认为,如果两个值同时为真,它们就不能再改变状态。但是在a.load()返回之后true,它甚至可能在b.load()评估之前改变它的值。

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

4

1 回答 1

5

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

于 2013-02-23T15:52:21.510 回答