boost库中mutex、condition_variable与mutex::scoped_lock联合使用实现线程之间的通信
最近在公司负责一个线程池的模块,里面用到了boost库中的mutex、condition_variable与mutex::scoped_lock,在此总结下线程池在使用时的方式和要点,这里记录了线程之间的通信方式,希望对学习线程之间(同一个进程)通信的同志们有所帮助。
线程之间(在同一个进程)的通信方式:信号量;mutex,条件变量和读写锁。
class Condition {public:Condition() : count(0) { }virtual ~Condition() { }void Increase() {boost::mutex::scoped_lock lock(mutex);++ count;}void Decrease() {boost::mutex::scoped_lock lock(mutex);-- count;cond.notify_all(); //通知所有的线程}void Wait() {boost::mutex::scoped_lock lock(mutex);while (count > 0) {cond.wait(lock);}}private:boost::condition_variable cond; //条件变量boost::mutex mutex;int32_t count;};
如果没有boost库,可以使用std::mutex, std::condition_variable代替,本人建议使用std标准库中的。
boost库中mutex、condition_variable与mutex::scoped_lock联合使用实现线程之间的通信相关推荐
- C++ boost库中的sp_counted_base实现解析
boost库中对sp_counted_base实现根据不同的体系配备了不同的实现体,这里主要分析x86体系下的gcc实现版本. 在正式介绍该函数之前,需要介绍三个函数的实现. inline int a ...
- boost库中优秀的网络库asio
文章目录 一.须知 二.ASIO 三.我们将从研究同步操作开始 四.当使用异步操作时,会发生不同的事件序列 五.Proactor模型 六.常用内容 七.C++ 建立本地网络服务器 (Boost.Asi ...
- 学校举办朗诵比赛,邀请了10位评委为每一名参赛选手的表现打分,打分由random库中的随机函数进行,打分范围在[80,100]之间,打分的结果存放在列表lst_score中。编写程序,根据以下规则计算
题目 学校举办朗诵比赛,邀请了10位评委为每一名参赛选手的表现打分,打分由random库中的随机函数进行,打分范围在[80,100]之间,打分的结果存放在列表lst_score中.编写程序,根据以 ...
- VC中利用多线程技术实现线程之间的通信
当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软 ...
- Android笔记(三十一)Android中线程之间的通信(三)子线程给主线程发送消息...
先看简单示例:点击按钮,2s之后,TextView改变内容. package cn.lixyz.handlertest;import android.app.Activity; import andr ...
- 黑马程序员--线程之间的通信,等待与唤醒机制,线程的终止方式,线程中的其他方法,优先级,toString() 守护线程,GUI图形化界面
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- 【Boost】boost库中thread多线程详解2——mutex与lock
1. mutex对象类 mutex类主要有两种:独占式与共享式的互斥量. ▲ 独占式互斥量: mutex: 独占式的互斥量,是最简单最常用的一种互斥量类型 try_mutex: 它是mutex的同义词 ...
- 【Boost】boost库中thread多线程详解10——condition条件变量
有的时候仅仅依靠锁住共享资源来使用它是不够的.有时候共享资源只有某些状态的时候才能够使用.比方说,某个线程如果要从堆栈中读取数据,那么如果栈中没有数据就必须等待数据被压栈.这种情况下的同步使用互斥体是 ...
- 【Boost】boost库中thread多线程详解9——thread_specific_ptr线程局部存储
大多数函数都不是可重入的.这也就是说在某一个线程已经调用了一个函数时,如果你再调用同一个函数,那么这样是不安全的.一个不可重入的函数通过连续的调用来保存静态变量或者是返回一个指向静态数据的指针. 举例 ...
最新文章
- 只在必要时保存服务器控件视图状态
- python redis链接建立实现分析
- ASP.NET MVC 音乐商店 - 1 创建项目
- zbg是什么意思_zbg的含义,zbg是什么的缩写,zbg的词语,zbg代表的意思
- PHP多进程之pcntl扩展的使用详解
- java线程不执行_java线程池,阿里为什么不允许使用Executors?
- 操作系统课程设计--银行家算法的模拟实现
- java获取时分秒毫秒_JAVA中如何获取毫秒和微秒数
- Redis 6.2.7安装配置
- 产品经理面试必备常见10道题及解析
- 浏览器刷新页面导致vuex数据丢失问题如何解决?
- 如何实现一个安全的Web登陆
- BZOJ_2393_Cirno的完美算数教室BZOJ_1853_[Scoi2010]幸运数字 _深搜+容斥原理
- html5网页制作技巧,HTML5 网页制作技巧
- ubuntu系统下的磁盘管理
- 数据库中的多表联查(四表联查)
- SpringBoot 整合 Sharding-JDBC
- SAP_常用函数清单
- 算法 · 深入理解 Fibonacci 数列计算及黄金分割
- Tensorflow系列 | Tensorflow从入门到精通(二):附代码实战