有关条件变量

原创 2012年03月27日 21:14:11
条件变量:是用来通知共享数据状态信息的。可以使用条件变量来通知队列已空,或队列非空,或任何其他需要由线程处理的共享数据状态。

每个条件变量必须与一个特定的互斥量,一个谓词条件相关联。当线程等待条件变量时,它必须将相关互斥量锁住。
在阻塞线程之前,条件变量等待操作将解锁互斥量;而在重新返回线程之前,会再次锁住互斥锁。
任何条件变量在特定时刻只能与一个互斥量相关联,而互斥量则可以同时与多个条件变量关联。

int pthread_cond_signal (pthread_cond_t *cond);
int pthread_cond_broadcast (pthread_cond_t *cond);

一旦有线程为某个谓词在等待一个条件变量,你可能需要唤醒它。pthreads提供了两种方式唤醒等待的线程:一个是“发信号”,一个是“广播”。发信号只唤醒一个等待该条件变量的线程,而广播将唤醒所有等待该条件变量的线程。



线程的条件变量实例

情景1:Jack开着一辆出租车来到一个站点停车,看见没人就走了。过段时间,Susan来到站点准备乘车,但是没有来,于是就等着。过了一会Mike开着车来到了这个站点,Sunsan就上了Mike的车走了。...
  • sonbai
  • sonbai
  • 2014年09月17日 14:53
  • 1424

条件变量为什么要和互斥锁配合使用

互斥锁一个明显的缺点是他只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,他常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时...
  • c12345423
  • c12345423
  • 2016年09月04日 14:19
  • 1784

C++11多线程之条件变量

翻译。原文:http://en.cppreference.com/w/cpp/thread/condition_variable
  • nirendao
  • nirendao
  • 2016年06月04日 22:12
  • 1926

Linux 线程同步---条件变量

1. 相关函数                                                                                             ...
  • hiflower
  • hiflower
  • 2008年03月18日 22:17
  • 41127

使用条件变量(多线程编程笔记)

条件变量属性使用条件变量可以以原子方式阻塞线程,直到某个特定条件为真为止。条件变量始终 与互斥锁一起使用。 使用条件变量,线程可以以原子方式阻塞,直到满足某个条件为止。对条件的测试是 在互斥锁(...
  • viewsky11
  • viewsky11
  • 2016年12月06日 12:27
  • 1841

互斥锁和条件变量使用实例

条件变量简介: 条件变量是线程中的东西,就是等待某一条件的发生,和信号一样。 用法 条件变量使我们可以睡眠等待某种条件出现。 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个...
  • I_love_blog
  • I_love_blog
  • 2017年05月22日 22:12
  • 341

Windows下条件变量的实现

条件变量是什么? 是一种同步对象。 条件变量有什么用?用于复杂的、多线程的、多核的程序中,实现多个线程间同步任务。 条件变量与其它同步对象的区别?与事件、互斥锁、segment等同步对象相比,条件变量...
  • leafarmy
  • leafarmy
  • 2009年03月31日 21:06
  • 5738

Windows下条件变量实现读写同步

上一篇写了个小程序,运用了下linux下条件变量实现多线程的同步,在windows上也有条件变量这个概念,只不过它是到vista之后才有支持,在linux上条件变量需要结合互斥量一起使用,Window...
  • dailongjian2008
  • dailongjian2008
  • 2016年07月17日 15:31
  • 1295

linux 线程学习之条件变量

互斥锁:用来上锁。条件变量:用来等待,当条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。 函数介绍: 1.名称:pthread_cond_init目标: 条件变量初...
  • hemmanhui
  • hemmanhui
  • 2009年08月06日 10:33
  • 12139

windows 使用关键段和条件变量实现的生产者和消费者线程同步

关键段比较简单,调用函数如下: VOID InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection );//初始化一个关键代码段...
  • xiaoyafang123
  • xiaoyafang123
  • 2016年12月06日 10:52
  • 506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:有关条件变量
举报原因:
原因补充:

(最多只允许输入30个字)