用于等式检查存储的编译器优化

时间:2017-04-06 08:42:43

标签: c++ c++11 atomic compiler-optimization

请考虑以下代码段:

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

问题如下:

  1. if (result != var) var = result是否优化为var = result

  2. 如果var不是原子的,那么这种优化(如果有的话)会不同吗?

  3. 编辑:我正在谈论gcc的权限。欢迎提出有关icc / clang的评论。

    编辑:所以在用var.compare_exchange_strong(!result, result);替换if之后,只有当现有值为!result时才会发生商店。我是对的吗?

0 个答案:

没有答案