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

pthread_cond_wait 不阻塞?

    来源: 互联网  发布时间:2017-03-02

    本文导语:  请教为什么下面的程序,在pthread_cond_wait这不阻塞呢。 #include  #include  #include  #include  #include  #include  #include  #include // 读写互斥体 pthread_mutex_t mutexWriteRead = PTHREAD_MUTEX_INITIALIZER; // 读条件变量 pthread_cond_t condW...

请教为什么下面的程序,在pthread_cond_wait这不阻塞呢。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include


// 读写互斥体
pthread_mutex_t mutexWriteRead = PTHREAD_MUTEX_INITIALIZER;
// 读条件变量
pthread_cond_t condWrote = PTHREAD_COND_INITIALIZER;


int main(int args, const char *argc[])
{
    // 如果 要写位置是待读位置 的话,则
    int dwRet =0;
    do
    {
        pthread_mutex_lock( &mutexWriteRead );
        dwRet=pthread_cond_wait(&condWrote, &mutexWriteRead ); //应当阻塞在此,但没有
        if( EINVAL == dwRet )
        {
            printf("== EINVALn");
        }
        else
        {
            printf("end wait  %dn",dwRet);
        }
    }
    while(1);
}

在ubuntu上运行此程序,结果如下:pthread_cond_waint根本没有阻塞,它的返回值为0说明它是接收到了信号,但这个信号从什么地方来的呢。
end wait 0
end wait 0
end wait 0
end wait 0
...



|
一般都是要这么用的:

pthread_mutex_lock(&m);
while(!wait_condition)
    pthread_cond_wait(&v, &m);
pthread_mutex_unlock(&m);

只有这样才保险,因为有时候是虚假返回。

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












  • 相关文章推荐
  • 关于pthread_cond_wait的几个问题
  • pthread_attr_init()及pthread_cond_wait使用疑惑
  • pthread_cond_signal和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却仍在等待。
  • oracle iis7站长之家


  • 站内导航:


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

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

    浙ICP备11055608号-3