我有代码(更新以更正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
的参数不能是原子的 - 所以我很困惑?
答案 0 :(得分:0)
局部变量x
不应该是原子的。它没有理由,它不能用作compare_exchange_weak
的参数,它需要一个常规值。
我不会对你在工会上做的任何事情发表评论,因为这对我来说毫无意义。