从类型为“std::atomic<Node*>::__pointer_type {aka Node*}”的右值对类型为“Node*&”的非常量引用进行无效初始化

invalid initialization of non-const reference of type ‘Node*&’ from an rvalue of type ‘std::atomic<Node*>::__pointer_type {aka Node*}’

我有以下代码片段:

struct Node {
   int data;
   Node *next;
};

atomic<Node*> head;
atomic<Node*> temp1 = head.load();
..
Node *temp2 = new Node;
//initialise values
head.compare_exchange_strong(temp1, temp2);

但是,我收到以下错误:

从类型为“std::atomic::__pointer_type {aka Node*}”的右值对类型为“Node*&”的非常量引用的初始化无效。

我不知道哪个引用在这里是不变的。任何帮助将不胜感激。

简单的答案是 temp1 应该是一个 Node*,而不是 Atomic, 因为 cmp/xchg 采用两个简单类型变量。

但我不太明白你想要达到的目的。 当然,如果您希望 next 不受线程影响,那么应该在结构中将其声明为 Atomic?