// boost 条件变量
// 做个简单的笔记 #include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp> boost::mutex m_mutex;
boost::condition_variable_any m_cond_var; // 加锁
do
{
boost::mutex::scoped_lock Lock(m_mutex);
// other doing
}
while (false);
// 唤醒沉睡的线程
m_cond_var.notify_all(); // 进入条件变量沉睡,直到通知的到来。
// 调用wait 之前必须加锁成功
// 因为在wait() 中会首先释放锁。
// 同时,当wait() 函数返回后,该函数会将锁拿到,
// 所以wait() 函数返回后,是持有该锁的状态返回的。
m_mutex.lock();
m_cond_var.wait(m_mutex);
m_mutex.unlock(); // 定时休眠
{
boost::mutex::scoped_lock lk(m_mutex);
if (m_cond_var.timed_wait(
lk, get_system_time() + posix_time::seconds()))
{
线程被 notify 唤醒
}
else
{
超时
}
} // 消费者线程使用条件变量
void Consumer()
{
while (true)
{
{
boost::mutex::scoped_lock lk(m_mutex);
// 每次进入条件变量休眠之前都要判断是否满足条件进入条件变量。
// 这一步很容易忘记
while (满足进入条件变量的条件)
m_cond_var.wait(lk);
// 从集合中提取需要的数据
// 块结束,lk 会自动释放锁
} ... // 处理从集合中得到的数据
}
}

最新文章

  1. font-weight -- 定义字体的粗细
  2. Android 组件属性
  3. 配置jdk
  4. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常[WCF]
  5. 事件冒泡与事件委托 -Tom
  6. 用原生javascript做的一个打地鼠的小游戏
  7. global, $GLOBALS[]
  8. linux驱动面试题目汇总
  9. 程序猿的道路~~(How to be a programmer?)
  10. Qt 向word中插入文字(使用QAxWidget和QAxObject)
  11. Java中File的使用
  12. (一)surging 微服务框架使用系列之surging 的准备工作rabbitmq安装
  13. 基于.NetCore的Redis5.0.3(最新版)快速入门、源码解析、集群搭建与SDK使用【原创】
  14. set操作
  15. anaconda 的安装
  16. web端代码提示
  17. ASP.NET MVC利用PagedList分页(一)
  18. mui 打开外网链接返回的正姿势!
  19. [Java学习]面向对象-类的继承;方法覆盖
  20. Beta阶段展示博客

热门文章

  1. Git 学习第二天(三)
  2. 剑指offer——53字符流中第一个只出现一次的字符
  3. zabbix4.0自动注册实践
  4. (Struts2学习系列五)Struts2默认action
  5. document.write()创建元素有缺陷,
  6. WordPress .gitignore
  7. Linux(二)高级文本处理
  8. swiper缩略图active切换失灵的解决思路
  9. 通过base64实现图片下载功能(基于vue)
  10. 帝国cms过滤采集内容