当前位置: 首页 > wzjs >正文

wordpress模板如何管理系统seo技术培训广东

wordpress模板如何管理系统,seo技术培训广东,网站域名注册费用,网站推广指的是什么个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言如何实现一个线程安全的队列思路应用场景代码实现总结 前言 在一次和豆包的模拟面试中,豆包问我:“在C中&#xf…

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 前言
  • 如何实现一个线程安全的队列思路
  • 应用场景
  • 代码实现
  • 总结


前言

在这里插入图片描述
在一次和豆包的模拟面试中,豆包问我:“在C++中,如何实现一个线程安全的队列呢?”


根据C++标准,STL容器的线程安全性遵循以下规则:

  • 只读操作是线程安全的:多个线程可以同时调用const 成员函数(如size, empty, at等)读取同一个容器,只要没有线程修改容器
  • 写操作需要独占访问:如果至少有一个线程在修改容器(如push_back, earse, operator[]等),其它线程必须通过同步机制,来保护对该容器的访问
  • 不同容器实例独立:不同线程操作不同的容器实例。

但如果多个线程同时修改同一个容器,或一个线程修改,另一个线程读取都是线程不安全的

在这里插入图片描述


如何实现一个线程安全的队列思路

实现步骤:

  1. 使用std::queue作为底层容器
  2. 使用std::mutex保护队列的访问
  3. 使用std::condition_variable协调线程,特别是在队列空时等待
  4. 在push时获取锁,添加元素后通知一个等待的线程
  5. 在pop时,使用while循环等待队列非空,处理虚假唤醒
  6. 提供tryPop和waitAndPop等不同方法,以适用不同场景
  7. 考虑异常安全,使用lock_guard或unique_lock管理锁的声明周期

在C++中实现线程安全队列的核心就在于通过同步机制保护共享数据的访问,并协调生产者和消费者线程操作


应用场景

  • 生产者-消费者模型:多个生产者线程向队列添加任务,消费者线程处理任务
  • 线程池任务队列:线程池使用线程安全的队列分发任务,支持异步返回值(std::future)
  • 事件驱动系统:管理异步事件,确保按顺序处理回调

代码实现

#include <queue>
#include <mutex>
#include <condition_variable>template <typename T>
class ThreadSafeQueue {
public:// 入队操作// 获取锁后添加元素,并通知一个等待线程void push(T value) {std::lock_guard<std::mutex> lock(_mtx);if(_finish)  return ;_data_queue.push(value);_cv.notify_one();};// 非阻塞出队// 立即尝试获取元素,若队列为空则返回失败bool tryPop(T& value) {std::lock_guard<std::mutex> lock(_mtx);if(_data_queue.empty() || _finish)return false;   // 队列为空 or 终止符为truevalue = _data_queue.front();_data_queue.pop();return true;};// 阻塞出队// 等待队列非空后获取元素,处理虚假唤醒void waitAndPop(T& value) {std::lock_guard<std::mutex> lock(_mtx);_cv.wait(lock, [this](){return !_data_queue.empty() || _finish;});if(finish)return ;value = _data_queue.front();_data_queue.pop();return ;};// 终止队列// 设置终止标志并唤醒所有线程void finish() {std::lock_guard<std::mutex> lock(_mtx);_finish = true;_cv.notify_all();};// 判断队列是否为空bool empty() const {std::lock_guard<std::mutex> lock(_mtx);return _data_queue.empty();};// 获取队列元素个数int size()  {std::lock_guard<std::mutex> lock(_mtx);return _data_queue.size();}
private:std::queue<T> _data_queue;       // 底层容器就是queuestd::mutex _mtx;                 // 互斥锁std::condition_variable _cv;     // 信号量 bool _finish = false;            // 终止标志
};

在这里插入图片描述


总结

以上就是我总结的在C++中如何实现线程安全的队列

在这里插入图片描述

http://www.dtcms.com/wzjs/346596.html

相关文章:

  • 中国移动视频网站建设流量宝官网
  • 同性男做的视频网站色盲测试图看图技巧
  • 网页设计与制作怎么做清平调代码四川游戏seo整站优化
  • 哪个网站可以做专业兼职青海百度关键词seo
  • 网站代码 输入文字 跳出内容十大接单平台
  • 网站开发设计论文网站关键词优化wang
  • 网站设计前期沟通单杭州优化排名哪家好
  • 12380举报网站建设情况百度云盘下载
  • 化妆品网站建设实训总结网站推广优化的原因
  • 杭州网站建设朗诵面朝百度投诉中心热线
  • 郑州建站系统在线咨询疫情最新消息今天公布
  • 简述企业网站的建设过程北京百度推广优化公司
  • 红河蒙自网站开发新浪体育世界杯
  • 怎么知道网站程序是什么做的百度top风云榜
  • 毕设做购物网站广州网站优化服务商
  • wordpress后台编辑慢qq群排名优化软件
  • 医疗网站被黑后可以做排名seo基础入门
  • 网站建设与网站设计泰安seo培训
  • 网站备案主体更换互联网营销师是做什么的
  • wordpress 站点主页seo实战视频
  • 莱芜东风街吧百度贴吧南宁百度seo排名优化
  • 管城网站建设志鸿优化设计电子版
  • 免费网站一级a做爰在免费线看谷歌浏览器官网下载安装
  • 海贼王路飞和女帝做的网站2345网址导航设置
  • 游戏网站设计论文电子商务营销
  • 做网站运营需要有什么能力营销托管全网营销推广
  • 中学网站建设工作实施方案百度推广工具
  • 网站备案转移网站排名靠前的方法
  • 亚马逊雨林大火营口seo
  • 快速免费电影视频网站建设网站怎么收录到百度