我有代碼(更新來修正工會結構排序):比較和交流薄弱的原子變量
union A {
struct {
short b;
short c;
};
std::atomic<int> d;
}
,我想用零值來交換B和C(因此原子d) ,使用compare_exchange_weak()
。所以我有這個:
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
的參數不能是原子的,所以我很困惑?
我認爲你有'struct'和'union'嵌套錯誤的順序。聯合兩個'短'沒有任何意義。 – Sneftel 2014-12-02 09:26:26
此外,'compare_exchange_weak'不會將'atomic'作爲參數。 – Sneftel 2014-12-02 09:28:33
@Sneftel b和c應該一起代表d – user997112 2014-12-02 09:28:43