gpt4 book ai didi

C++ std::atomic union

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:33 29 4
gpt4 key购买 nike

如何使用 std::atomic 将 union 设置为原子 union ?还是我必须声明 union 的成员是原子的?

typedef union {
int integer;
float flt;
double dbl;
int *intArray;
float *floatArray;
unsigned char *byteArray;
} ValueUnion;

class FooClass {
public:
std::atomic<ValueUnion> value;

};

访问union报错:

foo->value.floatArray = NULL;

error: no member named 'floatArray' in 'std::__1::atomic<ValueUnion>'
foo->value.floatArray = NULL;

我需要做这样的事情吗:

typedef union {
std::atomic<int> integer;
std::atomic<float> flt;
std::atomic<double> dbl;
std::atomic<int*> *intArray;
std::atomic<float*> *floatArray;
std::atomic<unsigned char*> *byteArray;
} ValueUnion;

并声明成员变量值如下?

class FooClass {
public:
ValueUnion value;

};

最佳答案

这取决于你想用它做什么。例如,将值存储到原子 union 中:

foo->value = []{ ValueUnion u; u.floatArray = NULL; return u; }();

foo->value.store([]{ ValueUnion u; u.floatArray = NULL; return u; }());

如果您希望能够对包含的值执行无锁原子运算(例如原子增量),那么您将需要进行第二个设计(原子 union )。

关于C++ std::atomic union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25868676/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com