转自:http://blog.csdn.net/future_fighter/archive/2009/02/13/3883415.aspx
继续昨天的线程同步,条件变量(Condition Variables)是用于线程间,通信共享数据状态改变的机制。
  1. 简介
  2. 条件变量的创建和销毁
  3. 等待条件变量
  4. 唤醒等待条件变量的线程

简介


    中间的矩形代表条件变量,当线程线位于矩形内,表示线程等待该条件变量。位于中心线下下方,则表示signal了该条件变量。
开始线程1 signal 了条件变量,由于没有其他线程等待于该条件变量,所以没什么效果。然后,线程1和线程2先后等待该条件变量,过了一会,线程3 signal了条件变量,线程3的信号解除了线程1的阻塞。然后,线程3等待该条件变量。最后线程1 broadcast了该条件变量,同时解除了等待于条件变量的线程1和线程2。

条件变量的创建和销毁

+ expand sourceview plaincopy to clipboardprint?
动态创建:一般情况下,条件变量要和它的判定条件定义在一起,此时若包含该条件变量的数据动态创建了,则条件变量也需要动态创建,不过记得不用时用pthread_cond_destroy销毁。
例程:
+ expand sourceview plaincopy to clipboardprint?

等待条件变量

+ expand sourceview plaincopy to clipboardprint?

唤醒等待条件变量的线程

+ expand sourceview plaincopy to clipboardprint?
author: david(heaven.hell.or@gmail.com)
page:http://code.google.com/p/heavenhell/

深入Phtread(三):线程的同步-Condition Variables相关推荐

  1. 转:条件变量(Condition Variables)

    条件变量(Condition Variables) 条件变量是什么? 条件变量为我们提供了另一种线程间同步的方法,然而,互斥量是通过控制线程访问数据来实现同步,条件变量允许线程同步是基于实际数据的值. ...

  2. python两个线程交替打印_三线程按顺序交替打印ABC的四种方法

    建立三个线程A.B.C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印. 二.Synchroni ...

  3. LinuxC高级编程——线程间同步

    LinuxC高级编程--线程间同步 宗旨:技术的学习是有限的,分享的精神是无限的. 1. 互斥锁mutex 多个线程同时访问共享数据时可能会冲突.对于多线程的程序,访问冲突的问题是很普遍的,解决的办法 ...

  4. 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行,太实用了!

    作者:Martin cnblogs.com/mhq-martin/p/9035640.html 基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运 ...

  5. 三个事件同步实现双相机同步WaitForMultipleObjects

    三个事件同步WaitForMultipleObjects 下面是一个例子,我们是等待两个相机都采集完一帧图像就采取相应的措施,第一个事件是左相机采集完一幅图像就setevent,第二个对应右相机,当他 ...

  6. 第八章 用户方式中线程的同步(2)

    二.高级线程同步 如果线程访问共享资源或者等待一些特殊事件的发生,如果共享资源可用或特殊事件已发生则函数返回同时该进程保持可调度状态,否则该线程处于等待状态.系统将处于等待状态的线程不占用系统资源(不 ...

  7. Java线程:线程的同步与锁

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. public  ...

  8. Java线程详解(5)-线程的同步与锁

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. public ...

  9. Java多线程-线程的同步与锁

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. package ...

最新文章

  1. Python网络爬虫实战:天猫胸罩销售数据分析
  2. a good approach to make demonstrations at the baidu netdisk
  3. Java基础---循环结构+例题
  4. countif函数比较两列不同_VLOOKUP函数批量查找,这么长的公式你可以写出来,立马加薪...
  5. Windows系统结构
  6. pc上html5游戏无法打开,原神PC端进不去怎么办
  7. openGauss助力中国移动获 “ICT优秀案例”
  8. 北京邮电大学计算机考研经验分享
  9. 【python 走进NLP】hanNLP 简繁拼音转换
  10. 设为首页 加入收藏 html,JS设为首页和加入收藏的代码
  11. 带你Git从入门到精通
  12. Nginx常用rewrite跳转重定向实例
  13. 使用微信支付接口生成支付二维码
  14. 什么是抖音SEO,抖音seo优化怎么做?抖音seo实操教程
  15. 【vm】虚拟机版本管理
  16. u8 u16 u32 u64 c++
  17. 湛蓝代码自动生成工具有感
  18. 【数据库数据恢复】Sql Server数据库数据恢复案例
  19. 狗为什么吃屎?真相男默女泪,但看完后你也会流口水......
  20. php现场大屏幕互动系统

热门文章

  1. android stadio open recent 在同一窗口打开
  2. Android基础——框架模式MVC在安卓中的实践
  3. 不怕面试再问 Activity,一次彻底地梳理(原理+生命周期)
  4. css样式表和选择器
  5. C语言函数集(二十)
  6. (0079)iOS开发之安全策略之HTTPS(1)
  7. php操作MySQL
  8. oracle 查询、创建、删除 数据库用户
  9. oracle的乐观锁和悲观锁
  10. hihoCoder week3 KMP算法