POSIX---互斥锁(pthread_mutex)和条件变量(pthread_cond)的用法
来源:互联网 发布:杭州摄影俱乐部 知乎 编辑:程序博客网 时间:2024/06/02 05:09
条件变量是利用共享的全局变量进行同步的一种机制。
(1)创建
动态创建
pthread_cond_t cond;
int pthread_cond_init (pthread_cond_t * cond,const pthread_condattr_t * attr);//动态调用API函数创建,attr设置属性,通常为NULL
静态创建
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
(2)注销
int pthread_cond_destroy(pthread_cond_t* cond);
(3)等待 使某线程挂起
int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex); // 条件等待
int pthread_cond_timeoutwait(pthread_cond_t* cond, pthread_mutex* mutex, const struct timespec* abstime); // 计时等待
为了防止竞争,条件变量通常跟互斥锁一起使用,当程序进入wait等待时后会将mutex进行解锁,当离开wait之前会重新上锁,所以使用wait等待函数前都必须给mutex上锁,wait函数等待结束后都的给mutex解锁!
(4)激发 激活某线程
int pthread_cond_signal(pthread_cond_t* cond); //激活第一个调用wait函数进入睡眠等待的线程
int pthread_cond_broadcast(pthread_cond_t* cond); // 激活所有调用wait函数而进入睡眠的线程
eg:
// 某段代码
..............
while ( !pglobal->stop ) {
/* wait for fresh frames */
//pthread_cond_wait会对mutex进行解锁 如果是别的线程加的锁 在这里解会出问题 如果没锁 解锁也会出问题
pthread_cond_wait(&pglobal->db_update, &pglobal->db);
/* read buffer */
frame_size = pglobal->size;
/* check if framebuffer is large enough, increase it if necessary */
if ( frame_size > max_frame_size ) {
DBG("increasing buffer size to %d\n", frame_size);
max_frame_size = frame_size+TEN_K;
if ( (tmp = realloc(frame, max_frame_size)) == NULL ) {
free(frame);
pthread_mutex_unlock( &pglobal->db );
send_error(fd, 500, "not enough memory");
return;
}
frame = tmp;
}
........
- POSIX---互斥锁(pthread_mutex)和条件变量(pthread_cond)的用法
- 详解linux互斥锁 pthread_mutex和条件变量pthread_cond
- 线程互斥和条件同步,pthread_mutex和pthread_cond
- Linux 条件变量的使用pthread_cond
- pthread_cond 线程条件变量
- 条件变量 pthread_cond
- 利用POSIX互斥锁和条件变量实现的信号量
- 利用POSIX互斥锁和条件变量实现的信号量
- pthread pthread_mutex pthread_cond相关
- pthread pthread_mutex pthread_cond相关
- POSIX线程:条件变量
- posix 条件变量
- Posix多线程-条件变量
- POSIX线程:条件变量
- POSIX多线程--条件变量
- Posix条件变量
- POSIX条件变量
- POSIX多线程--条件变量
- Scroller的使用
- 最短编辑距离
- SAMPLE SCRIPT TO CREATE SALES ORDER USING OE_ORDER_PUB.PROCESS_ORDER
- 黑马程序员-Java中静态绑定和动态绑定
- 修改a标签height,width的方法
- POSIX---互斥锁(pthread_mutex)和条件变量(pthread_cond)的用法
- 7个示例科普CPU Cache
- 二路归并排序
- Using the this API wsh_deliveries_pub.Delivery_Action to ship confirm for the delvery
- leetcode_Find Minimum in Rotated Sorted Array II
- Postman的安装与使用
- java 调用存储过程
- InputStream,String,File相互转化
- Android Monkey Test