我的第一个问题是:是否有任何方法可以访问atomic<struct>
对象中的结构体成员?
例如,我会收到编译器错误:
struct std::atomic<node>’ has no member named ‘data’ a.data = 0;
在这一部分中
struct node{
int data;
node* next;
};
int main(){
atomic<node> a;
a.data = 0;
}
我可以通过创建一个临时节点来解决这个问题,方法如下:
atomic<node> a;
node temp;
temp.data = 0;
a.store(temp);
但这似乎不太优雅。
第二个问题是,如果我有一个指向原子对象的指针,有没有办法直接访问节点的成员?显然以下代码无法编译,我该如何更改以将0存储在b处节点的值中?
atomic<node> b = new node;
b->data = 0;
这是我找到的一个解决方案,但还有更优雅的方法吗?
atomic<node> *b;
node temp;
temp.data = 0;
b->store(&temp);
最后,atomic<node*>
和atomic<node>*
之间的区别是什么?
atomic<node*>
强制原子更新它所持有的指针(而不是指针所指向的内容)。atomic<node>*
是一个指向atomic<node>
的指针,其目的是强制原子更新node
对象。 - Barry