我有以下代码片段:
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*,而不是一个原子,因为 CMP/XCHG 需要两个简单的类型变量。
但我真的不明白你想实现什么。当然,如果你想接下来被保护免受线程,那么它应该在结构中声明为原子?