我正在尝试实现并发数据结构,如下所示。
struct Node;
struct NodeList;
struct NodeAtomic{
struct Node* next;
};
struct NodeListAtomic{
struct NodeList* next;
};
struct Node{
atomic<struct NodeAtomic> ptr;
};
struct NodeList
{
struct Node listhead;
atomic<struct NodeListAtomic> ptr;
};
我正在访问对象的变量:
struct Node *temp;
temp->listhead.ptr.next.load();
但是我收到以下错误:
error: ‘struct std::atomic<NodeAtomic>’ has no member named ‘next’
有人可以指出这是错误的吗?
答案 0 :(得分:0)
使用您的NodeList
结构而不是Node
结构。
答案 1 :(得分:0)
我认为你不小心改变了.load()
和next
字段的顺序。
temp->listhead.ptr.next.load();
而不是
temp->listhead.ptr.load()->next;
这表示“以原子方式加载指向ptr
的指针,并查看其下一个字段”,而您之前所说的“查看名为{{的原子对象的next
字段” 1}},然后在该指针上调用ptr
函数。
独立地,如果load
的类型为temp
,则表示没有Node
字段。您的意思是listhead
是temp
吗?
最后,由于这是C ++代码,因此在使用它们时,不需要为结构类型的所有名称添加前缀NodeList
。例如,您可以重写
struct
作为
struct NodeList
{
struct Node listhead;
atomic<struct NodeListAtomic> ptr;
};