在我的多线程应用程序中,我有一个可以简化为这个例子的条件
std::atomic<bool> a, b;
// ...
if ( a.load() && b.load() )
{
// ...
}
显然,在条件之后,a 和 b 可以保持不同的值。
在我的应用程序中,它认为,如果两个值同时为真,它们就不能再改变状态。但是在a.load()
返回之后true
,它甚至可能在b.load()
评估之前改变它的值。
是否有一个优雅的解决方案来原子地评估这个语句?显然,锁定 a.store(..) 和 b.store(..) 的每次调用都可以在这里工作,但这远非好事。