这个错误提示说在调用 compare_exchange_weak
函数时,没有找到匹配的函数。从错误信息可以看出,问题出现在对 tail->next_
的访问上。
具体来说,tail->next_
是一个指向 Node
结构体的原子指针。当我们尝试将新节点插入队列末尾时,需要使用 compare_exchange_weak
函数来实现原子操作。该函数的作用是比较 tail->next_
和期望值(这里期望值为 nullptr
),如果相等则更新为新值(即插入新节点),并返回 true;否则不更新且返回 false。
但是,在上述代码中,编译器无法推断出期望值的类型,因此报错。为了解决这个问题,需要显式地指定期望值的类型。例如,将 nullptr
改为 static_cast<Node *>(nullptr)
即可:
while (!tail->next_.compare_exchange_weak(static_cast<Node *>(nullptr), new_node, std::memory_order_release, std::memory_order_relaxed))