文档章节

条件变量

认真即可
 认真即可
发布于 2015/11/08 13:13
字数 208
阅读 5
收藏 0

无论是boost库的condition_variable,还是posix库的pthread_cond_t,使用模式基本一样。

如:

    boost::mutex _mut;    //互斥体

    boost::condition_variable _cond;    //条件变量

    {

    boost::mutex::scoped_lock lock(_mut): 

    while(condition){   //2.为什么不能用if(condition)

          _cond.wait(_mut);    //1.为什么要传入互斥锁

    }

    }

1.wait方法内部,先unlock下锁, 然后阻塞进程, 要不然其他使用该互斥锁的线程将被阻塞,发生死锁;

2.为什么是while(condition),而不是if(condition) ?

这是因为在notify_one()和wait返回之间,有时间差,假设在这个时间差内,还有另外一个线程t改变了condition,那么t在wait()返回之后,显然应该再检查一遍condition。

建议结合openflow项目的双端队列来理解条件变量的使用。给个链接:

https://github.com/helight/openflow/blob/master/common/blocking_queue.h


© 著作权归作者所有

认真即可
粉丝 6
博文 103
码字总数 47780
作品 0
朝阳
程序员
私信 提问
线程条件变量pthread_cond_t (Ubuntu 12.04)

1.初始化条件变量pthreadcondinit #include <pthread.h>int pthreadcondinit(pthreadcondt cv, const pthreadcondattrt cattr);返回值:函数成功返回0;任何其他返回值都表示错误 初始化一个......

B_ice
2016/07/24
6
0
Linux多线程编程四(条件变量)

前一节中我们讲述了如何使用互斥锁来实现线程间数据的共享和通信,互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互...

wannneg
2016/04/16
101
0
linux多线程学习(五)---条件变量

1. 相关函数 #include pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_signal(pthread......

长平狐
2012/09/03
111
0
Linux多线程编程详细解析----条件变量 pthread_cond_t

Linux操作系统下的多线程编程详细解析----条件变量 1.初始化条件变量pthread_cond_init #include int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr); 返回值:函...

长平狐
2013/01/06
58
0
Linux多线程编程详细解析----条件变量 pthread_cond_t

Linux操作系统下的多线程编程详细解析----条件变量 1.初始化条件变量pthread_cond_init #include int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr); 返回值:函...

晨曦之光
2012/03/02
3.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

vue入门--简单路由配置

本文转载于:专业的前端网站➜vue入门--简单路由配置   在初始化vue init webpack <工程名>时,有一步是询问是否安装vue-router,选择yes,如果没有安装的话,后面需要自己安装。然后在目录...

前端老手
14分钟前
2
0
怎么给视频配音

很多刚开始尝试视频制作的小伙伴,帮助到怎么给制作完成的视频配音,其实给视频配音的方法非常简单,在手机上可以进行制作,下面一起来看看给视频配音的方法吧! 具体步骤如下: 1、首先在手...

白米稀饭2019
23分钟前
2
0
windows批处理bat脚本编写

什么是bat脚本 .bat结尾的文件其实就是windows上的批处理脚本,Windows中的bat文件相当于 Linux中shell编程的.sh脚本,批量执行DOS命令。 其最简单的例子,是逐行书写在命令行中会用到的各种...

孙幼凌
31分钟前
2
0
华为手机翻译功能怎么使用?这三种方法请务必收藏

华为手机翻译功能怎么使用?在我们的生活中会经常遇到翻译问题,许多外语不好的朋友该怎么办呢?华为手机已经为我们解决了这个问题,今天小编就教大家学会使用华为手机中的三种翻译技巧,需要...

翻译小天才
39分钟前
4
0
企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求、用户需求、产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需...

积木创意科技
42分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部