请考虑以下代码段:
static std::atomic<bool> var; //the variable to update.
// Update() updates the variable `var`
void Update() {
bool result = Foo(); //Foo() is some function returning a boolean.
// The doubt is here in this conditional store.
var.compare_exchange_strong(!result, result);
}
如果频繁调用Update(),说多个线程,如果由于缓存失败已经result
,则不希望将var
存储到var == result
。
问题如下:
if (result != var) var = result
是否优化为var = result
?
如果var不是原子的,那么这种优化(如果有的话)会不同吗?
编辑:我正在谈论gcc的权限。欢迎提出有关icc / clang的评论。
编辑:所以在用var.compare_exchange_strong(!result, result);
替换if之后,只有当现有值为!result时才会发生商店。我是对的吗?