// 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 会自动释放锁
} ... // 处理从集合中得到的数据
}
}

boost 条件变量的更多相关文章

  1. Boost条件变量condition_variable_any

    Boost条件变量可以用来实现线程同步,它必须与互斥量配合使用.使用条件变量实现生产者消费者的简单例子如下,需要注意的是cond_put.wait(lock)是在等待条件满足.如果条件不满足,则释放锁 ...

  2. BOOST 条件变量使用

    代码: // boost库 条件变量 使用测试 #include <iostream> #include <boost/thread.hpp> using namespace ...

  3. boost库(条件变量)

    1相关理念 (1)类名 条件变量和互斥变量都是boost库中被封装的类. (2)条件变量 条件变量是thread库提供的一种等待线程同步的机制,可实现线程间的通信,它必须与互斥量配合使用,等待另一个线 ...

  4. 并发编程(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题

    请阅读上篇文章<并发编程实战: POSIX 使用互斥量和条件变量实现生产者/消费者问题>.当然不阅读亦不影响本篇文章的阅读. Boost的互斥量,条件变量做了很好的封装,因此比" ...

  5. 并发编程入门(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题

    请阅读上篇文章<并发编程实战: POSIX 使用互斥量和条件变量实现生产者/消费者问题>.当然不阅读亦不影响本篇文章的阅读. Boost的互斥量,条件变量做了很好的封装,因此比" ...

  6. boost 线程、互斥体、条件变量

    1.任何技术都是针对特定场景设计的,也就是说,为了解决某个问题而设计的. 2.考虑下面一种场景:一个小旅馆,只有一个卫生间,有清洁人员,店主人,和旅客.卫生间用完之后,就会自动锁闭,必须取钥匙,才能进 ...

  7. 并发编程(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题

    boost的mutex,condition_variable非常好用.但是在Linux上,boost实际上做的是对pthread_mutex_t和pthread_cond_t的一系列的封装.因此通过对 ...

  8. c++并发编程之条件变量(Condition Variable)

    条件变量(Condition Variable)的一般用法是:线程 A 等待某个条件并挂起,直到线程 B 设置了这个条件,并通知条件变量,然后线程 A 被唤醒.经典的「生产者-消费者」问题就可以用条件 ...

  9. Linux多线程同步之相互排斥量和条件变量

    1. 什么是相互排斥量 相互排斥量从本质上说是一把锁,在訪问共享资源前对相互排斥量进行加锁,在訪问完毕后释放相互排斥量上的锁. 对相互排斥量进行加锁以后,不论什么其它试图再次对相互排斥量加锁的线程将会 ...

随机推荐

  1. ASP.Net 第一天笔记 MVC 控制器与视图数据传递注意事项

    1.如果方法的参数的名称与表单元素Name属性的值一致的话,会自动填充 2.如果表单元素的Name属性与实体类型中属性一致,那么表单中的数据会自动赋值给实体中的属性 3.控制器中重载的方法 方法前上边 ...

  2. 净心诀---python3装饰器

    python3装饰器 装饰器作用 简单理解:可以为已有函数添加额外功能 例: 已有2个函数如下 def MyFunc1(): print("This is a print function1 ...

  3. 如果在vue中实现一个输入框的抖动效果?

    1. 先来理下思路? 1)抖动就是摆动,现实中的钟摆可以很形象. 2)当摆动到临界点后,就会向相反的方向摆动. 3)在没有动力时,摆动会慢慢停止. 2.用法: :start.sync 里面是抖动器名字 ...

  4. 将时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间

    参考:https://blog.csdn.net/sxf_123456/article/details/81582964 参考模板: from datetime import datetime, ti ...

  5. 解决 Onenote 默认全角输入的一种解决办法(输入法已经设置为默认半角)

    环境说明:Windows 7 x64 Ultimate SP1, QQ 拼音输入法 6.1(5306),Onenote 2016 x64 问题描述:每次打开Onenote,在输入法已经设置为默认半角的 ...

  6. TOP和PS aux命令显示出来的栏目所代表的意思

    USER: 行程拥有者 PID: pid %CPU: 占用的 CPU 使用率 %MEM: 占用的记忆体使用率 VSZ: 占用的虚拟记忆体大小 RSS: 占用的记忆体大小 TTY: 终端的次要装置号码 ...

  7. API 数据缓存(本地缓存)

  8. IOS 表单含有input框和有position: fixed导致错位的问题

    在input框聚焦失焦的时候,都调用以下js即可 setScrollTop() { let scrollTop = document.body.scrollTop + document.documen ...

  9. 链表list

    Don't  lost link! list与vector不同之处在于元素的物理地址可以任意. 为保证对列表元素访问的可行性,逻辑上互为前驱和后继的元素之间,应维护某种索引关系.这种索引关系,可抽象地 ...

  10. 在GitHub上编辑README.md排版样式

    如何在github的readme.md编辑出好看的样式排版文章呢...? 参考:https://blog.csdn.net/u012067966/article/details/50736647