C++线程安全的队列是什么
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章将为大家详细讲解有关C++线程安全的队列是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。无界队列#include#include#include#inc
千家信息网最后更新 2026年10月31日C++线程安全的队列是什么
这篇文章将为大家详细讲解有关C++线程安全的队列是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

无界队列
#include#include #include #include #include #include template >class Queue //无界队列{public: Queue() = default; ~Queue() = default; //禁止拷贝和移动,编译器会自动delete /*Queue(const Queue&) = delete; Queue(Queue&&) = delete; Queue& operator=(const Queue&) = delete; Queue& operator=(Queue&&) = delete;*/ void push(const T& val) { emplace(val); } void push(T&& val) { emplace(std::move(val)); } template void emplace(Args&&...args) { std::lock_guard lk{ mtx_ }; q_.push(std::forward (args)...); cv_.notify_one(); } T pop()//阻塞 { std::unique_lock lk{ mtx_ }; cv_.wait(lk, [this] {return !q_.empty(); });//如果队列不为空就继续执行,否则阻塞 assert(!q_.empty()); T ret{ std::move_if_noexcept(q_.front()) }; q_.pop(); return ret; } std::optional try_pop()//非阻塞 { std::unique_lock lk{ mtx_ }; if (q_.empty())return {}; std::optional ret{ std::move_if_noexcept(q_.front()) }; q_.pop(); return ret; } bool empty()const { std::lock_guard lk{ mtx_ }; return q_.empty(); }private: Container q_; mutable std::mutex mtx_; std::condition_variable cv_;};#include int main(){ Queue q; std::thread t1( [&] { for (int i = 0; i < 100; ++i) { q.push(i); } }); std::thread t2( [&] { for (int i = 0; i < 100; ++i) { //std::cout< 有界队列
#include#include #include #include template class Queue{public: Queue(size_t capacity) :q_{ capacity }{} template void push(T&& val)//阻塞 { std::unique_lock lk{ mtx_ }; not_full_.wait(lk, [this] {return !q_.full(); }); assert(!q_.full()); q_.push_back(std::move(std::forward (val))); not_empty_.notify_one(); } template bool try_push(T&& val)//非阻塞 { std::lock_guard lk{ mtx_ }; if (q_.full())return false; q_.push_back(std::forward (val)); not_empty_.notify_one(); return true; } T pop()//阻塞 { std::unique_lock lk{ mtx_ }; not_empty_.wait(lk, [this] {return !q_.empty(); }); asert(!q_.empty()); T ret{ std::move_if_noexcept(q_.front()) }; q_.pop_front(); not_full_.notify_one(); return ret; } std::optional try_pop()//非阻塞 { std::lock_guard lk{ mtx_ }; if (q_.empty())return {}; std::optional ret{ std::move_if_noexcept(q_.front()) }; q_.pop_front(); not_full_.notify_one(); return ret; }private: boost::circular_buffer q_; std::mutex mtx_; std::condition_variable not_full_; std::condition_variable not_empty_;};#include int main(){ Queue q(10); std::thread t1( [&] { for (int i = 0; i < 100; ++i) { q.push(i); } }); std::thread t2( [&] { for (int i = 0; i < 100; ++i) { //std::cout< 关于"C++线程安全的队列是什么"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
阻塞
队列
篇文章
安全
线程
C++
更多
不错
实用
内容
拷贝
文章
知识
编译器
参考
帮助
有关
移动
编译
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
天津市摩尔互联网科技
广州百单互联网科技有限公司
美国互联网科技巨头监管
互联网科技金融公司
青岛互联网科技公司
互联网科技咨询
互联网科技素材视频竖屏
甘肃拓世互联网科技有限公司
衡水科技产业互联网平台
汉立互联网科技有限公司联系电话
北京三清互联网科技
互联网科技中介
佛山市翊博互联网络科技有限公司
玉溪新华互联网科技好不好
启辰互联网科技
四川互联网展示科技馆设计
上海同邻互联网科技有限公司规模
互联网科技接地气
美国五大互联网科技公司市值多少
互联网科技大佬云集
万易互联网科技
善班互联网科技
无锡溥仪互联网科技有限公司
农村开互联网科技讲堂
科技互联网的估值
汽车互联网创新科技园
千方科技属于互联网企业吗
注册互联网科技公司经营范围大全
翼展科技 首家互联网医院
佛山市拉法互联网科技有限公司