【发布时间】:2020-05-01 01:24:01
【问题描述】:
我正在使用 C++ 原子重构一些代码。代码如下所示:
std::atomic<bool> someFlag{}; // This can be set to true using a public method
// ...
const bool cond1 { someFunction() };
const bool cond2 { otherFunction() };
if (someFlag.load())
{
someFlage.store(false);
if (cond1 && cond2)
{
performSomeAction();
}
}
我目前正计划像这样重写if 语句:
if (std::atomic_exchange(&someFlag, false) &&
cond1 && cond2)
{
performSomeAction();
}
极其重要的是,在这个if 语句之后,someFlag 变量被设置为false。
因此,我想确保始终调用atomic_exchange,而不管cond1 和cond2 的值如何。无论优化设置如何,布尔表达式都是从左到右评估的,我能否保证会出现这种情况?
【问题讨论】: