比较并交换弱原子变量

时间:2014-12-02 09:21:59

标签: c++ c++11 atomic

我有代码(更新以更正union-struct排序):

union A {
    struct {
         short b;
         short c;
    };

    std::atomic<int> d;
}

我希望使用compare_exchange_weak()将b和c(因此原子d)交换为零值。所以我有这个:

A a;
.
.
.
std::atomic<int32_t> x = a.d.load(std::memory_order_relaxed);
int32_t valToReplace = 0;

return a.d.compare_exchange_weak(valToReplace, x, std::memory_order_release, std::memory_order_relaxed);

我该怎么做? compare_exchange_weak(),x的参数不能是原子的 - 所以我很困惑?

1 个答案:

答案 0 :(得分:0)

局部变量x不应该是原子的。它没有理由,它不能用作compare_exchange_weak的参数,它需要一个常规值。

我不会对你在工会上做的任何事情发表评论,因为这对我来说毫无意义。