pthread_cond_broadcast使用示例
来源:互联网 发布:网络售彩最新消息官方 编辑:程序博客网 时间:2024/06/05 14:18
今天在使用pthread_cond_t时,发现pthread_cond_t使用pthread_cond_broadcast函数唤醒多个条件变量时,使用两个互斥量分别控制时,只能唤醒其中一个变量,最后通过测试发现只能使用一个互斥量去控制。
个人理解:
thread1中使用pthread_mutex_lock(&mutex1);加互斥所,然后在pthread_cond_wait(&cond, &mutex1);这样可以保证这期间没有pthread_cond_broadcast或者pthread_cond_signal操作,从而保证条件不会丢失,当pthread_cond_wait(&cond, &mutex1);
完成操作之后,会自动释放互斥量。
然后thread2中的互斥量也紧接着根据上述方式加入等待对列,当调用pthread_cond_broadcast时会根据加入等待队列中的先后顺序依次唤醒他们。当是还是不明白为什么使用两个互斥量就只能唤醒其中一个呢?有清楚的朋友可以留言。
#include <stdio.h>#include <pthread.h>static pthread_cond_t cond;static pthread_mutex_t mutex1;static pthread_mutex_t mutex2;void *thread1_entry(void *arg){ while(1) { pthread_mutex_lock(&mutex1); printf("cond wait cond1\n"); pthread_cond_wait(&cond, &mutex1); printf("recv cond1\n"); pthread_mutex_unlock(&mutex1); }}void *thread2_entry(void *arg){ while(1) { pthread_mutex_lock(&mutex1); printf("cond wait cond2\n"); pthread_cond_wait(&cond, &mutex1); printf("recv cond2\n"); pthread_mutex_unlock(&mutex1); }}void *thread3_entry(void *arg){ int ret; while(1) { pthread_mutex_lock(&mutex1); pthread_mutex_lock(&mutex2); ret = pthread_cond_broadcast(&cond); if(ret < 0) { printf("pthread_cond_broadcast error\n"); } pthread_mutex_unlock(&mutex2); pthread_mutex_unlock(&mutex1); sleep(2); }}int main(void){ int ret =0; pthread_t tid1, tid2, tid3; ret = pthread_cond_init(&cond, NULL); if(ret < 0) { printf("pthread_cond_init error\n"); } ret = pthread_mutex_init(&mutex1, NULL); if(ret < 0) { printf("pthread_mutex_init error\n"); } ret = pthread_mutex_init(&mutex2,NULL); if(ret < 0) { printf("pthread_mutex_init error\n"); } ret= pthread_create(&tid1, NULL, thread1_entry, NULL); if(ret < 0) { printf("pthread_create thread1 error\n"); } ret = pthread_create(&tid2, NULL, thread2_entry, NULL); if(ret < 0) { printf("pthread_create thread2 error\n"); } sleep(2); ret = pthread_create(&tid3, NULL, thread3_entry, NULL); if(ret < 0) { printf("pthread_create thread3 error\n"); }#if 0 pthread_mutex_lock(&mutex1); pthread_mutex_lock(&mutex2); ret = pthread_cond_broadcast(&cond); if(ret < 0) { printf("pthread_cond_broadcast error\n"); } pthread_mutex_unlock(&mutex1); pthread_mutex_unlock(&mutex2);#endif while(1) { sleep(10000); } return 0;}
1 0
- pthread_cond_broadcast使用示例
- pthread_cond_broadcast
- pthread_cond_broadcast()
- pthread_cond_broadcast与pthread_cond_signal使用区别
- 条件锁(条件Mutex)pthread_cond_wait、pthread_cond_signal、pthread_cond_broadcast的使用
- 条件锁(条件Mutex)pthread_cond_wait、pthread_cond_signal、pthread_cond_broadcast的使用
- pthread_cond_broadcast相关
- pthread_cond_broadcast相关
- 条件锁(条件Mutex)pthread_cond_wait、pthread_cond_signal、pthread_cond_broadcast的使用[转]
- pthread_cond_wait pthread_cond_broadcast pthread_mutex_lock
- pthread_cond_broadcast() and pthread_cond_signal()
- 嵌入式 pthread_cond_broadcast相关
- pthread_cond_t, pthread_cond_broadcast()与 pthread_mutex_t
- pthread_cond_wait/pthread_cond_signal/pthread_cond_broadcast
- 关于pthread_cond_signal与pthread_cond_broadcast的使用说明
- 关于pthread_cond_signal与pthread_cond_broadcast的使用说明
- 关于pthread_cond_signal与pthread_cond_broadcast的使用说明
- pthread_cond_wait pthread_cond_broadcast条件变量时要注意
- 嵌入式系统的组成
- Android中使用WebView显示网页
- 新闻列表中如何让前几篇标题颜色和其他标题颜色不一样?
- wangEditer 总结回顾
- SQLServer常用的字符串函数
- pthread_cond_broadcast使用示例
- acm博弈论讲解
- Java利用Zxing生成二维码
- makefile(一)
- Google Protobuf
- Class类 究竟怎么用
- springMVC小结
- sh设置git alias
- 【案例】腾讯前员工创业笔记:那些跟钱有关的事儿