多线程编程--对pthread_cond_wait()函数的理解

转载 2012年03月30日 15:11:58
/************pthread_cond_wait()的使用方法**********/
    pthread_mutex_lock(&qlock);   
    pthread_cond_wait(&qready, &qlock);
    pthread_mutex_unlock(&qlock);
/*****************************************************/
The mutex passed to pthread_cond_wait protects the condition.The caller
passes it locked to the function, which then atomically places the
calling thread on the list of threads waiting for the condition and
unlocks the mutex. This closes the window between the time that the
condition is checked and the time that the thread goes to sleep waiting
for the condition to change, so that the thread doesn't miss a change
in the condition. When pthread_cond_wait returns, the mutex is again
locked.
上面是APUE的原话,就是说pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t
*mutex)函数传入的参数mutex用于保护条件,因为我们在调用pthread_cond_wait时,如果条件不成立我们就进入阻塞,但是进入阻
塞这个期间,如果条件变量改变了的话,那我们就漏掉了这个条件。因为这个线程还没有放到等待队列上,所以调用pthread_cond_wait前要先锁
互斥量,即调用pthread_mutex_lock(),pthread_cond_wait在把线程放进阻塞队列后,自动对mutex进行解锁,使得
其它线程可以获得加锁的权利。这样其它线程才能对临界资源进行访问并在适当的时候唤醒这个阻塞的进程。当pthread_cond_wait返回的时候又自动给mutex加锁。
实际上边代码的加解锁过程如下:
/************pthread_cond_wait()的使用方法**********/
pthread_mutex_lock(&qlock);    /*lock*/
pthread_cond_wait(&qready, &qlock); /*block-->unlock-->wait() return-->lock*/
pthread_mutex_unlock(&qlock); /*unlock*/

/*****************************************************/

补充: 条件变量的改变,会"依赖于"互斥量

相关文章推荐

POSIX多线程中的pthread_cond_wait() 函数

由于工作站软件的移植牵涉到这方面的内容, 搜一最近一直在学习Linux线程方面的知识!由于这本书上没有将条件变量的问题,所以不能理解的一个函数就是pthread_cond_wait().    今天终...

linux多线程 pthread_cond_wait() 函数

你在学习linux多线程的时候,往往会遇到一些问题。今天我来讲一下pthread_cond_wait这个函数。 API定义如下: int pthread_cond_wait(pthre...

linux多线程函数pthread_cond_wait

最近找到一篇很好的文章将linux多线程函数pthread_cond_wait,是我茅塞顿开,豁然开朗,决定转载过来,以便经常复习记忆。   条件变量的结构为pthread_cond_t,函数pt...

[Linux]多线程同步之pthread_cond_wait()学习笔记

线程间同步的一种情况:线程A需要等某个条件成立才能继续往下执行,现在这个条件不成立,线程A就阻塞等待,而线程B在执行过程中使这个条件成立了,就唤醒线程A继续执行。 在pthread库中通过条件变量(C...

Linux中posix线程的pthread_cond_wait函数为何使用while循环

关于pthread_cond_wait函数为何需要使用while循环,或者为何不使用if条件判断问题,经过Google后发现网上有不少已说明,这里给出自己的说明: 该函数的定义,可参考http://p...

对pthread_cond_wait()函数的理解

原文: 了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线程信号发送系统的核心,也是最难以理解的部分。  首先,让我们考虑以下情况:线程为查看已链...

信号pthread_cond_wait

  • 2011-05-17 23:49
  • 344KB
  • 下载

pthread_cond_wait详解

  • 2015-03-20 11:34
  • 1.15MB
  • 下载

互斥量、条件变量与pthread_cond_wait()函数的使用,详解(二)

1.Linux“线程”      进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型。Linux是一种“多进程单线程”的操作系统。Linux本身只有进程的概念,而...

pthread_cond_wait()函数说明

1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are u...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)