当前位置: 技术问答>linux和unix
请各位围观,这个pthread_cond_broadcast为什么不能唤醒主线程,只能唤醒线程1,这是怎么回事儿?
来源: 互联网 发布时间:2017-04-22
本文导语: #include #include #include #include //typedef void * (*fun)(void *); int g_flag = 0; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; void *ThFun1(void *arg) { printf("Enter thd1 funtion!n"); g_flag = 1;...
#include
#include
#include
#include
//typedef void * (*fun)(void *);
int g_flag = 0;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void *ThFun1(void *arg)
{
printf("Enter thd1 funtion!n");
g_flag = 1;
pthread_cond_wait(&cond,&mutex);
pthread_join(*(pthread_t *)arg,NULL);
printf("Leave thd1 funtion!n");
pthread_exit(0);
}
void *ThFun2(void *arg)
{
printf("Enter thd2 funtion!n");
pthread_mutex_lock(&mutex);
if(g_flag == 1)
//pthread_cond_signal(&cond);
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
printf("Leave thd2 funtion!n");
pthread_exit(0);
}
int main(int charc,char **argv[]){
printf("Enter main funtion!n");
pthread_t thd1,thd2;
int rv1, rv2;
rv1 = pthread_create(&thd1,NULL,ThFun1,&thd2);
rv2 = pthread_create(&thd2,NULL,ThFun2,NULL);
pthread_cond_wait(&cond,&mutex);
printf("Leave main funtion!n");
pthread_exit(0);
}
|
pthread_cond_wait条件成立不成立时会释放互斥锁,条件成立后又会加锁。所以用之前先加pthread_mutex_lock,条件成立后要pthread_mutex_unlock
而main 和thd1 里面属于竞态,条件满足后只有一方会先执行,另一方继续等待条件满足
而main 和thd1 里面属于竞态,条件满足后只有一方会先执行,另一方继续等待条件满足
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。