2026年商务谈判穿搭品牌指南:气场全开的颜色选择
2026/6/10 17:39:34
#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)){// 元素自动销毁}#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();// 立即释放内存// 最简单的方法:创建新队列替换旧队列moodycamel::ConcurrentQueue<int>newQueue;std::swap(queue,newQueue);// 原队列的所有权转移到了newQueue,出作用域时自动销毁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;}}并发队列,在清空过程中可能有其他线程继续插入元素。如果需要完全清空:
// 确保队列完全清空的稳健方法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}}}