当前位置:  技术问答>linux和unix

关于pthread_cond_wait的一个简单问题!

    来源: 互联网  发布时间:2015-05-06

    本文导语:  我使用pthread_cond_wait来阻塞主线程和又主线程创建的子线程,在主线程中调用pthread_cond_signal可以唤醒子线程,可是在子线程中调用pthread_cond_signal却不能唤醒主线程,为什么?下面是部分代码, pthread_mutex_t mutex, main_m...

我使用pthread_cond_wait来阻塞主线程和又主线程创建的子线程,在主线程中调用pthread_cond_signal可以唤醒子线程,可是在子线程中调用pthread_cond_signal却不能唤醒主线程,为什么?下面是部分代码,
pthread_mutex_t mutex, main_mutex;
pthread_cond_t  cond, main_cond;

void * connect_process(void * pParam);
int main()
{
        pthread_t th;
        pthread_mutex_init(&mutex,NULL);
        pthread_cond_init(&cond,NULL);
        pthread_mutex_init(&main_mutex,NULL);
        pthread_cond_init(&main_cond,NULL);
        pthread_create(&th,connect_process,NULL,NULL);
        pthread_cond_signal(&cond);
pthread_mutex_lock (&main_mutex);
pthread_cond_wait( &main_cond, &main_mutex);
pthread_mutex_unlock (&main_mutex);
        printf("main thread is wakedn");
}
void * connect_process(void * pParam)
{
       pthread_mutex_lock (&mutex);
       pthread_cond_wait( &cond, &mutex);
       pthread_mutex_unlock (&mutex);
       pthread_cond_signal(&main_cond);
       printf("sub thread is wakedn);
}

|
代码上好像没有问题。可能是时序的问题:在子线程调用signal时,主线程尚未进入wait状态。
你在线程函数的
pthread_cond_signal(&main_cond);
前加一句
sleep(3);
在试试

另外,如果没有任何线程wait一个pthrea_cond_t对象,cond_signal消息将被丢弃。在极端情况下,上面的代码会导致死锁:子线程已启动,但在调用pthread_cond_wait之前切换到主线程;主线程调用pthread_cond_signal,由于子线程尚未调用pthread_cond_wait,该消息丢失。接着主线程等待子线程唤醒它;在某个时刻,子线程又开始执行,等待那个已经丢失的signal消息。

|
你pthread_create()参数赋值不对吧?
子线程不能唤醒主线程?我这里可以啊:我把connect_process()改成这样:
void * connect_process(void * pParam)
{
//       pthread_mutex_lock (&mutex);
//       pthread_cond_wait( &cond, &mutex);
//       pthread_mutex_unlock (&mutex);
       sleep(3);
       pthread_cond_signal(&main_cond);
       printf("sub thread is wakedn");
}

运行后输出:
sub thread is waked
main thread is waked
说明主线程被唤醒

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • pthread_attr_init()及pthread_cond_wait使用疑惑
  • pthread_cond_signal和pthread_cond_wait两个函数是怎么意思?
  • ~如何GDB调试因pthread_cond_wait()阻塞的线程??~
  • pthread_cond_wait 不阻塞?
  • 关于pthread_cond_wait函数
  • pthread_cancel和pthread_cond_wait
  • pthread_cond_wait 之前的 pthread_mutex_lock 语句 有什么作用,可以不用吗?
  • pthread_cond_wait 没起作用?
  • pthread_cond_wait的一个迷惑
  • 线程广播信号,pthread_cond_wait却仍在等待。
  • pthread_cond_wait() 用法深入分析


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3