news 2026/8/6 22:02:09

moodycamel::ConcurrentQueue 清空队列的方法论

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
moodycamel::ConcurrentQueue 清空队列的方法论

方法1:循环弹出元素

#include<concurrentqueue.h>// 如果存储的是指针类型moodycamel::ConcurrentQueue<int*>queue;int*item=nullptr;while(queue.try_dequeue(item)){if(item){deleteitem;// 如果需要释放内存item=nullptr;}}// 如果存储的是普通类型moodycamel::ConcurrentQueue<int>queue;intitem;while(queue.try_dequeue(item)){// 元素自动销毁}

方法2:批量弹出

#include<concurrentqueue.h>#include<vector>moodycamel::ConcurrentQueue<int>queue;// 批量弹出,效率更高std::vector<int>temp;queue.try_dequeue_bulk(std::back_inserter(temp),queue.size_approx());// temp现在包含所有弹出的元素,随后会被自动销毁temp.clear();// 立即释放内存

方法3:使用交换技巧、或 std::move(…)

// 最简单的方法:创建新队列替换旧队列moodycamel::ConcurrentQueue<int>newQueue;std::swap(queue,newQueue);// 原队列的所有权转移到了newQueue,出作用域时自动销毁

方法4:自定义清空函数(模板)

template<typenameT>voidClearConcurrentQueue(moodycamel::ConcurrentQueue<T>&queue){T item;while(queue.try_dequeue(item)){// 元素自动处理}}// 对于指针类型的特化版本template<typenameT>voidClearConcurrentQueue(moodycamel::ConcurrentQueue<T*>&queue){T*item=nullptr;while(queue.try_dequeue(item)){deleteitem;item=nullptr;}}

线程安全

并发队列,在清空过程中可能有其他线程继续插入元素。如果需要完全清空:

  1. 暂停生产者:确保没有线程在插入
  2. 使用原子标志:协调清空操作
  3. 多次清空:循环清空直到确认队列为空
// 确保队列完全清空的稳健方法voidEnsureQueueEmpty(moodycamel::ConcurrentQueue<int>&queue){intitem;intemptyCount=0;constintMAX_EMPTY_CHECKS=3;while(emptyCount<MAX_EMPTY_CHECKS){if(queue.try_dequeue(item)){emptyCount=0;// 重置计数器}else{emptyCount++;std::this_thread::yield();// 让出CPU}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 11:34:09

【Java 25 LTS六大核心特性】

Java 25 LTS 深度拆解&#xff1a;改变开发范式的六大核心特性 基本类型模式匹配&#xff08;JEP 507&#xff09; 模式匹配简化了类型检查和转换&#xff0c;减少冗余代码。例如&#xff1a; if (obj instanceof String s) { System.out.println(s.toLowerCase()); } 基…

作者头像 李华
网站建设 2026/8/7 2:31:53

Langchain-Chatchat助力医疗文档智能检索与问答

Langchain-Chatchat助力医疗文档智能检索与问答 在一家三甲医院的早交班会议上&#xff0c;一位年轻医生急切地翻找《KDIGO慢性肾病临床实践指南》第47页的内容——关于三期患者使用ACEI类药物的禁忌证。他花了七分钟才从PDF目录中定位到相关章节。而就在同一时刻&#xff0c;…

作者头像 李华
网站建设 2026/8/7 3:23:14

Langchain-Chatchat如何实现文档相似度比对?查重与去重依据

Langchain-Chatchat 如何实现文档相似度比对&#xff1f;查重与去重依据 在企业知识库日益膨胀的今天&#xff0c;一个看似简单却影响深远的问题浮出水面&#xff1a;为什么我上传了十份几乎一模一样的项目报告&#xff0c;系统还在一遍遍地索引、存储、检索&#xff1f; 这不仅…

作者头像 李华
网站建设 2026/8/7 9:56:38

java学习--String和StringBuffer互转

在 Java 中&#xff0c;String 是不可变字符串&#xff0c;StringBuffer 是可变字符串&#xff08;线程安全&#xff09;&#xff0c;两者的相互转换是开发中常见操作&#xff0c;以下是具体实现方式、示例及注意事项&#xff1a;一、String 转 StringBuffer有两种核心方式&…

作者头像 李华
网站建设 2026/8/6 11:01:21

如何用Langchain-Chatchat实现本地化AI智能问答?

如何用 Langchain-Chatchat 实现本地化 AI 智能问答&#xff1f; 在企业数字化转型的浪潮中&#xff0c;知识管理正面临前所未有的挑战&#xff1a;技术文档越积越多、制度文件分散在各个角落、新员工培训成本居高不下。更棘手的是&#xff0c;当人们试图借助AI提升效率时&…

作者头像 李华
网站建设 2026/8/5 22:51:31

Langchain-Chatchat如何处理多义词歧义?上下文感知消歧算法

Langchain-Chatchat如何处理多义词歧义&#xff1f;上下文感知消歧算法 在企业知识库日益复杂、用户对问答系统准确性要求不断提升的今天&#xff0c;一个看似简单的问题却常常让AI“犯迷糊”&#xff1a;当用户问“Java是什么&#xff1f;”时&#xff0c;系统该如何判断这里的…

作者头像 李华