当前位置:  技术问答>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 里面属于竞态,条件满足后只有一方会先执行,另一方继续等待条件满足

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 小弟第一次接触linux,求帮助,来围观啦!!!
  • 初学shell编程遇到的问题,各位大虾进来围观
  • platform很奇怪的问题!求高手围观!!!急。。。。。。。。。。。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,