news 2026/5/19 7:05:58

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/5/10 22:13:57

halcon窗口显示文字

前言 我们在开发C#上位机的时候&#xff0c;有时候会使用Halcon控件&#xff0c;在Halcon控件上会有绘制文字&#xff0c;本文就来介绍如何实现。 Halcon代码实现 dev_close_window () dev_open_window (0, 0, 512, 512, black, WindowHandle) set_font (WindowHandle, 宋体…

作者头像 李华
网站建设 2026/5/13 20:15:09

Langchain-Chatchat错误排查手册:常见问题与解决方案

Langchain-Chatchat 错误排查手册&#xff1a;常见问题与解决方案 在企业级 AI 应用日益强调数据隐私和本地化部署的今天&#xff0c;基于大型语言模型&#xff08;LLM&#xff09;的知识库系统正从“云端调用”转向“私有可控”。Langchain-Chatchat 作为一款开源、可离线运行…

作者头像 李华
网站建设 2026/5/17 5:17:19

AtCoder Beginner Contest竞赛题解 | 洛谷 AT_abc436_b Magic Square

​欢迎大家订阅我的专栏&#xff1a;算法题解&#xff1a;C与Python实现&#xff01; 本专栏旨在帮助大家从基础到进阶 &#xff0c;逐步提升编程能力&#xff0c;助力信息学竞赛备战&#xff01; 专栏特色 1.经典算法练习&#xff1a;根据信息学竞赛大纲&#xff0c;精心挑选…

作者头像 李华
网站建设 2026/5/15 12:30:19

Langchain-Chatchat如何选择合适的LLM后端模型?

Langchain-Chatchat 如何选择合适的 LLM 后端模型&#xff1f; 在企业级智能问答系统日益普及的今天&#xff0c;一个核心矛盾逐渐凸显&#xff1a;我们既希望大模型能像人类一样理解并回答复杂问题&#xff0c;又不愿将敏感数据上传至第三方云端。这种对安全性、可控性与智能化…

作者头像 李华
网站建设 2026/5/13 6:46:49

Android16 3576 a14和a16传递自定义编译变量

在RK3576的Android16项目里面,RK的Android16使用的是Android14的kernel和vendor,使用的是Android16的system,当做自适应编译的时候,怎么把Android16设置的自定义编译属性,给到Android14做自适应。 1.查看RK3576编译命令和代码结构: 编译的时候需要进入a16也就是Android16…

作者头像 李华
网站建设 2026/5/9 10:41:54

餐饮+AI: 萤石后厨智能体,24h在线的食安助手

点开外卖软件选店铺时&#xff0c;你是否也经常担心后厨卫生问题。当食品安全成为消费者的心头大患时&#xff0c;从而也变成了餐饮行业的核心竞争力。曾经传统人工监管的疏漏与局限&#xff0c;已难以满足食安信任需求与品牌管理标准。 萤石明厨亮灶≠装摄像头&#xff0c;还…

作者头像 李华