cwinthread*线程指针怎么销毁结束_最新版Web服务器项目详解 01 线程同步机制封装类...

点 击 关 注 上 方"两猿社

设 为"置 顶 或 星 标",干 货 第 一 时 间 送 达。

f32a56628da19f8cb54037ed498f2089.png

互 联 网 猿 | 两 猿 社

基础知识

RAII

  • RAII全称是“Resource Acquisition is Initialization”,直译过来是“资源获取即初始化”.

  • 在构造函数中申请分配资源,在析构函数中释放资源。因为C++的语言机制保证了,当一个对象创建的时候,自动调用构造函数,当对象超出作用域的时候会自动调用析构函数。所以,在RAII的指导下,我们应该使用类来管理资源,将资源和对象的生命周期绑定

  • RAII的核心思想是将资源或者状态与对象的生命周期绑定,通过C++的语言机制,实现资源和状态的安全管理,智能指针是RAII最好的例子

信号量

信号量是一种特殊的变量,它只能取自然数值并且只支持两种操作:等待(P)和信号(V).假设有信号量SV,对其的P、V操作如下:

  • P,如果SV的值大于0,则将其减一;若SV的值为0,则挂起执行

  • V,如果有其他进行因为等待SV而挂起,则唤醒;若没有,则将SV值加一

信号量的取值可以是任何自然数,最常用的,最简单的信号量是二进制信号量,只有0和1两个值.

  • sem_init函数用于初始化一个未命名的信号量

  • sem_destory函数用于销毁信号量

  • sem_wait函数将以原子操作方式将信号量减一,信号量为0时,sem_wait阻塞

  • sem_post函数以原子操作方式将信号量加一,信号量大于0时,唤醒调用sem_post的线程

以上,成功返回0,失败返回errno

互斥量

互斥锁,也成互斥量,可以保护关键代码段,以确保独占式访问.当进入关键代码段,获得互斥锁将其加锁;离开关键代码段,唤醒等待该互斥锁的线程.

  • pthread_mutex_init函数用于初始化互斥锁

  • pthread_mutex_destory函数用于销毁互斥锁

  • pthread_mutex_lock函数以原子操作方式给互斥锁加锁

  • pthread_mutex_unlock函数以原子操作方式给互斥锁解锁

以上,成功返回0,失败返回errno

条件变量

条件变量提供了一种线程间的通知机制,当某个共享数据达到某个值时,唤醒等待这个共享数据的线程.

  • pthread_cond_init函数用于初始化条件变量

  • pthread_cond_destory函数销毁条件变量

  • pthread_cond_broadcast函数以广播的方式唤醒所有等待目标条件变量的线程

  • pthread_cond_wait函数用于等待目标条件变量.该函数调用时需要传入 mutex参数(加锁的互斥锁) ,函数执行时,先把调用线程放入条件变量的请求队列,然后将互斥锁mutex解锁,当函数成功返回为0时,互斥锁会再次被锁上. 也就是说函数内部会有一次解锁和加锁操作.

功能

锁机制的功能

  • 实现多线程同步,通过锁机制,确保任一时刻只能有一个线程能进入关键代码段.

封装的功能

  • 类中主要是Linux下三种锁进行封装,将锁的创建于销毁函数封装在类的构造与析构函数中,实现RAII机制

 1class sem{
2    public:
3        //构造函数
4        sem()
5        {
6            //信号量初始化
7            if(sem_init(&m_sem,0,0)!=0){
8                throw std::exception();
9            }
10        }
11        //析构函数
12        ~sem()
13        {
14            //信号量销毁
15            sem_destroy(&m_sem);
16        }
17    private:
18        sem_t m_sem;
19};
  • 将重复使用的代码封装为函数,减少代码的重复,使其更简洁

 1   //条件变量的使用机制需要配合锁来使用
2   //内部会有一次加锁和解锁
3   //封装起来会使得更加简洁
4   bool wait() 5   {
6       int ret=0;
7       pthread_mutex_lock(&m_mutex);
8       ret=pthread_cond_wait(&m_cond,&m_mutex);
9       pthread_mutex_unlock(&m_mutex);
10       return ret==0;
11   }
12   bool signal()13   {
14       return pthread_cond_signal(&m_cond)==0;
15   }

如果本文对你有帮助,阅读原文star一下服务器项目,我们需要你的星星^_^.

完。

4304e574128d9e4857ea0ddb1474ac80.png

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

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

相关文章

您的计算机无法访问dota2,解决win7系统DOTA2无法连接至Steam网络的设置方法

随着电脑的使用率越来越高,我们有时候可能会遇到win7系统DOTA2无法连接至Steam网络问题,如果我们遇到了win7系统DOTA2无法连接至Steam网络的问题,要怎么处理win7系统DOTA2无法连接至Steam网络呢?接下来给大家带来win7系统DOTA2无法…

根据经纬度计算范围_高中地理必修一二三思维导图+计算公式全汇总!能用3年...

必修一必修二必修三计算公式1.经纬度计算:经度差与地方时差算经度——地方时每相差1小时,经度相差1;纬差法与正午太阳高度算纬度——正午太阳相差多小,纬度相差多少;北极星的仰角即地平高度等于当地地理纬度;经纬线上长度算经纬度——1经线长…

linux 系统 可视化工具实时监控_Linux上的实时监控平台-你需要这样做

应朋友们要求,介绍上Linux系统下的实时监控平台,在上次提到了glances,它提供了较多的监控指标,那如果我们要看历史数据呢?某一时间段的回放呢?显然glances是做不到的。因此,实时监控平台就应运而…

职称类计算机论文,计算机类职称论文发表(2)

计算机类职称论文发表篇二基于计算机通信网络的采矿传输技术【摘 要】煤矿开采是人类合理开发自然资源的主要途径,对国民产业经营收益水平也有很大的影响。信息科技改革指导下,分析了基于计算机通信网络的采矿信息传输方案,指导了煤炭开采新模…

linux 普通用户touch权限不够_Linux 开启指令

简单指令1.1、 ls 指令语法1:# ls [路径]表示列出指定路径下的文件夹和文件 的名字,如果路径没有指定则列出当前路径下的(list)列如:在root用户的家目录中输入ls命令,则会看到以下的效果:要求列…

5、this调用语句必须是构造函数中的第一个可执行语句_ES6中的Promise和Generator详解...

简介ES6中除了上篇文章讲过的语法新特性和一些新的API之外,还有两个非常重要的新特性就是Promise和Generator,今天我们将会详细讲解一下这两个新特性。Promise什么是PromisePromise 是异步编程的一种解决方案,比传统的解决方案“回调函数和事件”更合理和…

华中师范大学本科生计算机课教师,华中师范大学第八届大学生计算机设计大赛的通知...

为了激发大学生学习计算机知识和技能的兴趣和潜能,培养其创新能力和团队合作意识,以及运用信息技术解决实际问题的综合实践能力,切实提高计算机教学质量,教育部高等学校计算机类专业教学指导委员会、软件工程专业教学指导委员会、…

labelimg如何调整框的颜色_如何制作摄影集(下)

如果说上篇讲的是有关排版设计,那么下篇就是有关具体实施了。如果你正对作品集的制作跃跃欲试,那么下篇的内容仍旧非常重要,而且非常干货。 目录:软件推荐(Id)字体推荐纸张选择打印方式(激光、喷…

highcharts 显示平均值数值_拼多多评价多久能显示,有什么出评价技巧吗?

很多商家都知道,拼多多的评价,有时不一定会在买家评价后就立马出现,一般得等一段时间才会显示,,这个时间一般不会很久,24小时之内,评论一般在审核通过后就会展示出来。如果长时间不展示&#xf…

辽宁省大学生计算机系统与程序设计竞赛,2019CCF大学生计算机系统与程序设计竞赛(华东分赛区)在我校顺利举办...

5月18日,2019CCF大学生计算机系统与程序设计竞赛(CCSP)华东分赛区比赛及颁奖会在我校举办。今年是CCSP大赛首次采用区域分赛区的比赛,共分为7个赛区,包括东北区(哈尔滨工业大学承办),华北区(北京邮电大学承办)、华东区(南京航空航…

arm b bl 地址无关码_ARM汇编语言入门(六)

Part 6:条件状态和分支在探讨CPSR时我们已经接触了条件状态。我们通过跳转(分支)或者一些只有满足特定条件才执行的指令来控制程序在运行时的执行流。通过CPSR寄存器中的特定bit位来表示条件状态。这些位根据指令每次执行的结果而不断变化。例…

bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出

阅读本文大概需要 8 分钟前言上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识。作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解&#x…

四年级计算机课程,信息技术(四年级)全部课程PPT课件.ppt

信息技术(四年级)全部课程PPT课件调整窗口的大小 最小化 最大化 关闭 水平的双向箭头可以调整窗口的宽度,让窗口变宽或变窄。 调整窗口的大小 最小化 最大化 关闭 倾斜的双向箭头可同时调整窗口的高和宽。 做一做 打开我的文档,对窗口进行最小化、最大化…

python等腰梯形_简单空实心图形打印|Python练习系列[3]

def shape_print(n): #实心等腰三角形 for y in range(n): for x in range(n-y-1):#先循环打印空格 形成一个倒直角三角形 range()中的值是形成的规律 print( ,end) for z in range(y*21):#再循环打印X 形成一个等腰三角形 range()中的值是形成的规律 print(X,end) print() pri…

adas记录仪app_路影行车记录仪app

路影行车记录仪app具有非常强大实用的行车视频记录功能,能够清晰的记录车主的行车过程,路影app可以通过手机对路影行车记录仪进行设置,预览、回放、下载图片/视频等操作,p还能保存各种视频文件,下载导航地图等。路影行…

连接硬盘计算机没显示,新买的移动硬盘在我的电脑中无法显示,但是右下角图标显示已经连接,? 爱问知识人...

USB不被电脑识别,如果是系统或系统自带的驱动的原因,一般经过重启就可恢复或开机按F8进入安全模式在退出,在进入正常模式(修复受损的注册表)。U盘插入电脑,电脑提示“无法识别的设备”故障诊断方法如下。第1步:如果U盘…

爬虫python软件准备_工具准备的差不多了,接下来就是python爬虫的封装了

python爬虫的方便大家都懂的。那么,既然常用,那么我们当然要封装啦。 那么我们可以先封装一个父类的爬虫 我自己的设计想法就是,首先,爬虫必须要有个字段来存储匹配的规则gainRule,然后有个字段存储需要取什么属性outA…

axure 输入框默认灰色字_Axure如何应对意外关闭

在使用Axure的时候,相信很多朋友都遇到过这样的情况:axure提交的东西都不见了。内容做到一半或者已经快要完成时,软件意外关闭,导致做的内容意外丢失。看着自己的劳动成果就这样浪费了,这种情况真的令人心疼。如果遇到…

计算机图像隐藏信息,学术讲座:杨庆隆-台湾成功大学-基于纠错码的信息隐藏与秘密图像共享...

学术讲座讲座题目:基于纠错码的信息隐藏与秘密图像共享讲座时间:2017.10.27。上午9:30-11:00讲座地点:十教10106讲座讲者:杨庆隆教授讲者简历:杨庆隆,台湾东华大学教授,博士&#xf…

matlaba绘制gps星空图_网络图横道图绘制软件 5.0免锁版告别纯手工绘制,修改工作量大!...

按图片加小编微信今日资料会员专属资料链接链接:https://pan.baidu.com/s/1AZY3cPeEv72GBRfESIwk_w提取码:88B8安装教程:1、下载压缩文件,解压后双击【网络计划V5.exe】,点击立即安装。2、没有替换补丁打开软件是这种情…