// 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. 2019河北省大学生程序设计竞赛(重现赛) L题-smart robot(深度优先搜索)

    题目链接:https://ac.nowcoder.com/acm/contest/903/L 题意:给你 n * n的方阵,你可以从任意一个数字开始走,可以走上下左右四个方向,走过的数字会被拼合,拼合 ...

  2. Netty 相关目录

    Netty 相关目录 Netty 源码学习--客户端流程分析 Netty 源码学习--服务端流程分析 Netty 源码分析--ChannelPipeline Netty 源码学习--EventLoop ...

  3. java MySQl数据库连接

    <%@ page import="java.sql.Connection" %> <%@ page import="java.sql.DriverMan ...

  4. 40-Ubuntu-用户管理-05-which查看命令所在位置

    which 查看执行命令所在的位置 例: 1.查看修改用户密码的命令--passwd所在位置 which passwd 注: /etc/passwd 是用于保存用户信息的文本文件. /usr/bin/ ...

  5. 自动化监控系统(三) 搭建xadmin做网站后台

    Django有个自带的admin后台,不过界面不怎么好看,这里我用xadmin 我的python版本是3.5,可以使用支持py3的xadmin:https://github.com/sshwsfc/x ...

  6. 微信小程序picker下拉绑定数据

    页面部分 <picker mode = "selector" bindchange="bindPickerChange" value="{{pr ...

  7. Linux下安装.NETCore3.0

    今天把.NETCore从2.2升到3.0记录一下 Download .NET Core 3.0  :https://dotnet.microsoft.com/download/dotnet-core/ ...

  8. 在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr。

    在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr. $("#checkAll").prop("checked", true ...

  9. JAVA javac

    { 用法: javac <options> <source files>其中, 可能的选项包括:  -g                         生成所有调试信息  - ...

  10. Kafka命令行操作

    Kafka命令行操作 1)查看当前服务器中的所有topic [bingo@hadoop101 kafka]$ bin/kafka-topics.sh --list --zookeeper hadoop ...