news 2026/2/13 7:20:18

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/2/5 8:06:44

NPM_配置的补充说明

原来的registry.npm.taobao.org已替换为registry.npmmirror.com npm config set registry https://registry.npmmirror.com确认配置已经生效 npm config get registry若需要恢复默认的官方源&#xff0c;可以执行以下命令 npm config set registry https://registry.npmjs.o…

作者头像 李华
网站建设 2026/1/30 18:12:38

halcon窗口显示带有箭头的直线

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

作者头像 李华
网站建设 2026/2/9 10:10:57

Langchain-Chatchat结合GPU加速推理,实现高性能问答服务

Langchain-Chatchat 结合 GPU 加速推理&#xff0c;打造高性能本地问答系统 在企业知识管理日益复杂的今天&#xff0c;如何让员工快速获取分散在成百上千份文档中的关键信息&#xff0c;已成为组织效率提升的瓶颈。一个常见的场景是&#xff1a;新员工想了解公司的差旅报销标准…

作者头像 李华
网站建设 2026/2/10 6:15:59

研究生必备:9款AI论文神器,真实文献交叉引用,一键生成文献综述

如果你是正在熬夜赶Deadline的毕业生&#xff0c;面对堆积如山的文献资料却无从下笔&#xff1b;或是面临延毕压力&#xff0c;被导师催稿催得焦头烂额的研究生&#xff1b;又或是没钱去支付高昂知网查重费用的大学生&#xff0c;别担心&#xff0c;这篇文章就是为你量身打造的…

作者头像 李华
网站建设 2026/1/30 16:10:52

2025中国iPaaS市场份额独立第一测评小白快速上手方法与步骤

《2025中国iPaaS行业发展白皮书》明确指出&#xff0c;企业集成平台优势明显已成为数智化转型的核心支撑。《2025中国iPaaS产品权威测评》通过对20主流平台的技术能力、用户体验、市场覆盖等维度评估&#xff0c;结合《2025中国iPaaS产品排行榜》数据&#xff0c;连趣云iPaaS平…

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

测试诚信原则:数字时代质量防线的基石与践行路径

测试诚信的时代呼唤 在数字化浪潮席卷全球的2025年&#xff0c;软件已深入社会各个角落&#xff0c;从医疗设备到金融系统&#xff0c;从智能家居到自动驾驶&#xff0c;其质量直接关乎人类安全与效率。作为软件质量的“守门人”&#xff0c;测试从业者的责任空前重大。然而&a…

作者头像 李华