我有一个包含两个数据成员的结构:
struct A{
    short b;
    short c;
};
以及包含许多这些struct对象的向量:
std::vector<A> vec;
在运行时,数据成员A.b和A.cstruct对象设置为零/值x.然而,b并c必须在相同的时间-一个不能在没有其他分别更新修改.我正计划使用原子compare_exchange_weak()来进行更新.
我不确定我是否应该将每个结构体表示为std::atomic<A>向量中,或者我是否应该在结构中放置一个联合,将两个短路组合成一个uint32_t然后修改它:
union A {
    struct {
         short b;
         short c;
    };
    uint32_t d;
};
什么是最好的解决方案?我应该存储以下矢量:
std::vector<uint32_t>
并且在访问每个元素时,reinterpret_cast到A,以获得d?
我希望锁定尽可能地最少侵入.
不需要可移植性,这将在Linux,64位,x86,GCC 4.8+编译器上
我建议将变量包装在一个类中,并使用由互斥锁保护的 getter 和 setter,并将变量设置为私有。
使用联合可能会导致基于机器架构和编译器标志的不可预见的功能。
编辑 运行存储给定结构类型值的简单程序的结果(Linux 32位,x86):