首页 > 其他分享 >03_muduo_base3

03_muduo_base3

时间:2024-11-10 13:20:04浏览次数:3  
标签:API 03 muduo 封装 变量 互斥 base3 线程 上锁

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()都是私有的,内部创建和内部销毁。
*/

标签:API,03,muduo,封装,变量,互斥,base3,线程,上锁
From: https://www.cnblogs.com/wzy-cc/p/18537878

相关文章

  • 学期:2024-2025-1 学号:20241303 《计算机基础与程序设计》第七周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第七周作业这个作业的目标<写上具体方面>计算机科学概论(第七版)第8章并完成云班课测试,《C语言程序设计》第6章......
  • 2024-2025-1 20241403 《计算机基础与程序设计》第七周学习总结
    学期(如2024-2025-1)学号(如:20241403)《计算机基础与程序设计》第7周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标数组与......
  • CSC1003 OJ system running Java SDK.
    CSC1003Assignment2ImportantNotes:Theassignmentisanindividualproject,tobefinishedonone’sowneffort.Theworkmustbesubmittedbefore6pmNov.8,2024(Friday),BeijingTime.Thisisafirmdeadline.Nolatesubmissionsareaccepted.Plag......
  • COMP0035 specification
    COMP0035Coursework012024CourseworkspecificationTableofcontentsIntroductionCourseworkspecificationGettingstartedGeneralrequirementsandconstraintsSection1:DataexplorationandpreparationSection2:DatabasedesignandcreationSection3:......
  • 032集——圆转多段线(Circle to Polyline)(CAD—C#二次开发入门)
     CAD中圆可转为带有凸度的多段线以方便后期数据计算、处理,效果如下:白色为圆,红色为转换后的多段线(为区分,已手工偏移多段线)publicstaticvoidXX(){varcurves=Z.db.SelectEntities<Entity>();foreach(varitemincurves){if......
  • agc032 A~E 题解
    a倒推,每次删掉最后一个b[i]=i的即可b一开始发现可以构造完全二分图,使两边和同为S,这样每个点的和=对面二分图点的和=S,然后n=6和为奇数进一步发现可以直接分成A组组内和为B的组,然后组之间连边,此时S=(A-1)B,有AB=n(n+1)/2当n为奇数时取A=(n+1)/2,B=n,n单独一组其他大匹配小;n为偶数......
  • CF803E Roma and Poker 差分约束
    CF803ERomaandPoker记W为\(1\),L为\(-1\),D为\(0\),前\(i\)个字符的和为\(dis_i\)。则有:当第\(i\)位为W时:\[dis_i-dis_{i-1}=1\]可以推出:\[\begin{cases}dis_i-dis_{i-1}\le1\\dis_i-dis_{i-1}\ge1\\\end{cases}\]转为差分约束形式:\[\begin{ca......
  • CF803E Roma and Poker 差分约束
    CF803ERomaandPoker记W为\(1\),L为\(-1\),D为\(0\),前\(i\)个字符的和为\(dis_i\)。则有:当第\(i\)位为W时:\[dis_i-dis_{i-1}=1\]可以推出:\[\begin{cases}dis_i-dis_{i-1}\le1\\dis_i-dis_{i-1}\ge1\\\end{cases}\]转为差分约束形式:\[\begin{ca......
  • VMware ESXi 6.7 U3u (ESXi670-202403001) 下载
    VMwareESXi6.7U3u(ESXi670-202403001)下载VMwareESXi6ExtendSupportRelease请访问原文链接:https://sysin.org/blog/vmware-esxi-6/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org产品简介VMwareESXi:专门构建的裸机Hypervisor了解可直接安装到您的物......
  • 031集——获取外轮廓(只支持线段多段线)(CAD—C#二次开发入门)
    此版本跟007集相比,增加了个识别断线头的功能,即原始图形中线段可不闭合。usingAutodesk.AutoCAD.DatabaseServices;usingAutodesk.AutoCAD.Geometry;usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Linq;usingSystem.Text;u......