文档介绍:ce123的技术博客
专注于嵌入式软件开发
Linux下多任务间通信和同步-条件变量
分类: linux多任务间通信和同步 2013-11-26 11:33 495人阅读评论(0) 收藏举报
Linux下多任务间通信和同步-条件变量
嵌入式开发交流群280352802,289195589,欢迎加
入!
概述
互斥锁的一个明显缺点是它只有两种状态:
变量通过允许线程阻塞和等待另一个线程发送信号的方法解决了互斥锁的不
足,,条件变量被用来阻塞一个线程,当条件不
满足时,
程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量
的基本操作有以下两个:
1. 触发条件:当条件变为true时; 
2. 等待条件:挂起线程直到其他线程触发条件.
注意:条件变量应该和互斥量配合使用,以避免出现条件竞争,一个线程预备等
待一个条件变量,当它在真正进入等待之前,另一个线程恰好触发了该条件.
条件变量采用的数据类型是pthread_cond_t,在使用之前必须要进
行初始化,与互斥锁类型,也包括两种方式.
静态初始化:可以把常量PTHREAD_COND_INITIALIZER赋给静态分配的条件变
量;
动态初始化:在申请内存(malloc)后,
意在释放内存前需要调用pthread_cond_destory.
系统调用pthread_cond_init() 该调用将创建一个条件变
量,其原型为: 
#include <>
int pthread_cond_init(pthread_cond_t*restrict cond,pthread_condattr_t *restrict attr); 当pthread_cond_init的attr参数为NULL时,会创建一个默认属性的条件变量;非默认的条件变量需要设置条件变量属性,我们可以参考man手册.
1
系统调用pthread_cond_wait() 该系统调用对传递给
pthread_cond_wait的互斥锁变量cond进行保护,其原型:
int pthread_cond_wait(pthread_cond_t*restrict cond,pthread_mutex_t *restric mutex); 函数把调用线程放到等待条件的线程列表上,等待条件函数等待条件变为真,然后对互斥锁解锁,,,互斥量将再次被锁住.
系统调用pthread_cond_timedwait()  该系统调用功能
与pthread_cond_wait()函数相似,:
#include <>
int pthread_cond_t timedwait(pthread_cond_t*restrict