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

关于pthread_cond_wait函数

    来源: 互联网  发布时间:2016-07-10

    本文导语:  大家好:     这几天刚开始接触多线程编程,有一些问题不太会,还望请高手指点下小弟啊,谢了。     1. pthread_cond_wait函数需要条件变量和互斥量两个参数,但是唤醒线程的pthread_cond_signal函数只传了一个条件...

大家好:
    这几天刚开始接触多线程编程,有一些问题不太会,还望请高手指点下小弟啊,谢了。
    1. pthread_cond_wait函数需要条件变量和互斥量两个参数,但是唤醒线程的pthread_cond_signal函数只传了一个条件变量,那么是不是就说明在调用pthread_cond_signal之前,要被激活的线程必须锁住互斥量才行啊?
    2. 我编了一个小函数在主函数里创建了一个线程,然后让新创建的线程等待。然后检验输入的整数如果是偶数,则启动创建的线程,那么对这个线程的函数pthread_cond_wait里的互斥量参数应该怎么处理啊,先把它锁住吗?

|
1.调用pthread_cond_signal之前,要被激活的线程必须锁住互斥量才行啊?
是的,否则很可能由于系统调度的关系,导致你的pthread_cond_wait的线程(一般都会有个while判断条件是否满足)会再次调用阻塞在pthread_cond_wait,导致永远失去被唤醒的机会。

2.给你个例子


int count=0; 

线程
pthread_mutex_lock(&count_lock); 
while(count==0){ 
    pthread_cond_wait(&count_nonzero, &count_lock);         

pthread_mutex_unlock (&count_lock); 

唤醒线程 
pthread_mutex_lock(&count_lock); 
if(count==0) 
pthread_cond_signal(&count_nonzero); 
count++; 
pthread_mutex_unlock(&count_lock); 







|
下面是使用函数pthread_cond_wait()和函数pthread_cond_signal()的一个简单的例子。

pthread_mutex_t count_lock;
pthread_cond_t count_nonzero;
unsigned count;
decrement_count() 
{
 pthread_mutex_lock (&count_lock);
 while(count==0)
  pthread_cond_wait( &count_nonzero, &count_lock);
  count=count -1;
 pthread_mutex_unlock (&count_lock);
}

increment_count()
{
 pthread_mutex_lock(&count_lock);
 if(count==0)
  pthread_cond_signal(&count_nonzero);
  count=count+1;
 pthread_mutex_unlock(&count_lock);
}

  count值为0时,decrement函数在pthread_cond_wait处被阻塞,并打开互斥锁count_lock。此时,当调用到函数 increment_count时,pthread_cond_signal()函数改变条件变量,告知decrement_count()停止阻塞。

|
是的、、、
increment_count() 可以不是、

|

贴个你不理解的代码,然后把疑惑的地方标记出来,有代码比较好说一些,说实话,我没看明白你这个回复的意思

|
pthread_cond_wait(*cond, *mutex);
上面是pthread_cond_wait函数的原型,这个函数要返回的条件就是要有其它线程signal这个cond并unlock这个mutex, 所以其它线程只signal这个cond而没有unlock这个mutex的话,你的pthread_cond_wait不会返回.

|
mark

|
http://topic.csdn.net/u/20091011/12/89b61519-d822-4908-9bdb-4a8891a78854.html

在这贴中回过了,楼主可以参考一下

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












  • 相关文章推荐
  • 关于pthread_cond_wait的几个问题
  • pthread_attr_init()及pthread_cond_wait使用疑惑
  • ~如何GDB调试因pthread_cond_wait()阻塞的线程??~
  • pthread_cond_wait 不阻塞?
  • pthread_cancel和pthread_cond_wait
  • 关于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