ZBLOG

#include #include #include #include template class LockFreeQueue { public: LockFreeQueue() : head_(new Node), tail_(head_.load()) {} ~LockFreeQueue() { while (Node *old_head =...

这个错误提示说在调用 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))

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=682

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?