03_muduo_base3

news/2024/11/14 12:46:09/文章来源:https://www.cnblogs.com/wzy-cc/p/18537878

5.6 互斥锁和条件变量的封装

类图

该类是封装了互斥锁的一些基本操作,包括互斥锁的初始化、销毁、上锁、解锁等功能。但是实际上使用RAII技术又封装了一个类,那就是MutexLockGuard。这主要也是采取了类似智能指针的封装思路,让互斥锁的生命周期交给操作系统去管理,释放的时机由操作系统管理,防止程序员忘记释放导致内存泄漏。

条件变量

条件变量是必须和互斥锁配合使用。waitForSeconds(int)这里主要是用来判断是否超时。

//伪代码
mutex上锁while(条件){wait//上锁->等待条件变量->加锁。这里的上锁和解锁是为了保证条件变量的操作是线程安全的}
mutex解锁

CountDownLatch,这是对条件变量的封装。既可以用于所有子线程等待主线程发起执行命令(notifyAll),也可以用于主线程等待子线程初始化完毕才开始执行。

API分析:

/*
countDown()计数器减为0时,唤醒所有阻塞在条件变量的线程
getCount():获取当前计数器
*/

5.7 缓冲区的封装。

主要分为了无界缓冲区(BlockingQueue)和有界缓冲区(BoundedBlockingQueen)。本质上是一个生产者-消费者问题中充当仓库的一个角色。

API接口:

/*
put:生产者将产品放到队列,注意需要上锁,队列长度无限
take:消费者消费产品,需要互斥锁
*/

API接口:

/*
和无界的区别在于需要判断队列是否满了。并且队列是采用了环形缓冲区(类似循环队列)的方式。头部用来读取/消费,尾部用来写/生产
*/

5.8 ThreadPool

本质上是一个生产者-消费者问题。

类图:

API接口:

/*
run() : 往线程池中添加任务。
runInThread():执行任务
take():获取任务
*/

5.9 线程安全Singleton

类图:

/*
ponce:保证只能被执行一次
value:一个模板T指针
instance():返回一个单例指针
构造函数和析构函数都是私有的
inti()和destory()都是私有的,内部创建和内部销毁。
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/830613.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B样条(BSpline,即 Basis Spline)

B 样条(BSpline)是一种在计算机图形学、计算机辅助设计、数值分析等领域广泛应用的数学曲线和曲面表示方法。以下是对 B 样条的详细定义: 一、基本概念 B 样条是基于一系列控制点(Control Points)来定义曲线或曲面的。它通过一个特定的基函数(Basis Functions)集合与这些…

实验3 类和对象

实验任务1: button.hpp#pragma once#include <iostream> #include <string>using std::string; using std::cout;// 按钮类 class Button { public:Button(const string &text);string get_label() const;void click();private:string label; };Button::Butto…

【LaTex 2024软件下载与安装教程】

1、安装包 Latex2024: 链接:https://pan.quark.cn/s/1dad34ca4d8f 提取码:5bja 2、安装教程 1) 双击压缩包内intall-tl-windows.bat安装,弹窗安装对话框2) 自动弹出安装窗口,如果弹出以下窗口说明文件夹目录太长或者有中文,建议放磁盘根目录;如果没有弹出…

实现qt 窗口无边框拖拽

无边框拖拽是参考Qt实战6.万能的无边框窗口(FramelessWindow) - Qt小罗 - 博客园的文章,对其代码进行修改而来。 本篇一共会提供本人写的无边框的代码以及Qt实战6.万能的无边框窗口(FramelessWindow) - Qt小罗 - 博客园里面的完整代码供大家参考. 代码使用的话,我是直接让…

20222411 2024-2025-1 《网络与系统攻防技术》实验四实验报告

1.实验内容 1.1实践内容 一、恶意代码文件类型标识、脱壳与字符串提取 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下: (1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具…

第六次高级语言程序设计作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C/ 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13303 学号:102400110 姓名:阿卜杜拉阿布力克木 123456789101112这次作业难度还是很高我会继续努力!

水体颜色智能识别系统

水体颜色智能识别系统基于AI人工智能机器视觉分析识别技术,水体颜色智能识别系统通过现场监控摄像头,实现对河道、湖面及排水口水体颜色的智能检测与识别。这一系统能够代替人眼,对水体颜色进行24小时不间断的监测,有效克服了传统人工巡检的局限性,提高了监测的效率和准确…

仪表图像识别算法

仪表图像识别算法基于AI的机器视觉分析识别技术,通过训练深度学习模型,使得摄像头能够像人一样“看”懂仪表盘上的数据。这些现场监控摄像头能够实时捕捉仪表盘的图像,利用AI算法自动分析并识别出仪表的示数或开关状态。这种技术不仅能够在任何时间、任何地点进行自动读表,…

溺水识别摄像头防溺水系统

溺水识别摄像头防溺水系统采用了先进的AI算法,溺水识别摄像头防溺水系统能够准确识别出人体的姿态和动作。当有人员在泳池中挣扎、失去平衡或是长时间不动时,系统会立即判断这可能是一起溺水事件,并立即发出语音报警,提醒周围的人进行救援。同时,系统还会将提示消息推送给…

学期:2024-2025-1 学号:20241303 《计算机基础与程序设计》第七周学习总结

作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第七周作业这个作业的目标 <写上具体方面>计算机科学概论(第七版)第8章 并完成云班课测试,《C…

2024-2025-1 20241327 《计算机基础与程序设计》第七周学习总结

作业信息 |2024-2025-1-计算机基础与程序设计)| |-- |- |2024-2025-1计算机基础与程序设计第七周作业)| |快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题 |作业正文|https://www.cnblogs.com/shr060414/p/18…

PbootCMS 网站转移后无法打开报错提示“No input file specified”怎么办

问题:PbootCMS 网站转移后无法打开,提示“No input file specified”。 解决方案:删除 .user.ini 文件:检查根目录中是否存在 .user.ini 文件,如有则删除。 重启 Web 服务器:重启 Apache 或 Nginx 服务。 检查 PHP 配置:确保 cgi.fix_pathinfo 设置为 1。 检查 Nginx 配…