c++ - std::atomic 和自定义结构的问题

标签 c++ struct atomic stdatomic

由于某种原因似乎无法执行此操作(请参阅代码)。查看文档,似乎没有理由让它不起作用......

struct vector {
    float x, y, z;
};
std::atomic<vector> Name = {0};

它说我不能用初始化列表初始化它,当我在我的代码中使用它时,它说它没有成员。

Name.x = 4.f;
Name.y = 2.f * Name.x;
Name.z = 0.1f;

最佳答案

std::atomic<vector> 的实例不是 vector 的实例.它没有 x , y , 或 z作为成员。它所拥有的(概念上,内部)是 vector 的一个实例。 .但是您无法使用 . 访问它运算符,因为这会破坏原子性,就像 std::atomic 的要点一样. (这也是您不能使用初始化列表的原因。)

访问vector东西,使用 load()store() :

//atomically load a snapshot of Name
auto name_snapshot = Name.load(); //name_snapshot is a vector instance
name_snapshot.x = 4.f;
name_snapshot.y = 2.f * name_snapshot.x;
name_snapshot.z = 0.1f;
//now atomically store it:
Name.store(name_snapshot);

关于c++ - std::atomic 和自定义结构的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46165173/

相关文章:

json - Golang Unmarshal slice 类型接口(interface)

c++ - 联盟中的atomic <>作为性能黑客

c++ - 为什么这个 cppreference 摘录似乎错误地暗示原子可以保护关键部分?

c++ - 这不是尾递归吗? (堆栈溢出错误)

c++ - QGraphicsItem 剪裁子项。

c++ - 返回非常量引用会导致绑定(bind)引用错误

c - 如何对嵌套在结构体数组中的结构体数组进行排序 C

c - 使用 fgets 将 double 存储到结构中

concurrency - DynamoDB 中原子计数器的可靠性

c++ - 调用 Clock::getElapsedTime() 时 SFML 2.0 崩溃