浅谈pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex)

来源:互联网 发布:罗技在淘宝买怎么样 编辑:程序博客网 时间:2024/05/18 12:38

第一眼看到pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex) 还真有点头疼。

(1)、一般在式样该函数之前会加锁pthread_mutex_lock(&mutex) 然后在调用pthread_cond_wait。

(2)、pthread_cond_wait 函数做了一下一些事情:

              1、pthread_mutex_unlock(&mutex),block阻塞自己,这个过程不消耗cpu,这个过程是一个原子操作。

              2、当收到pthread_cond_signal(&cond)后,使自己苏醒,然后在pthread_mutex_lock(&mutex)锁住。

  (3) 、问题:这个时候有些人会很苦恼:

           1、pthread_cond_wait 前调用pthread_mutex_lock(&mutex)加锁,而他自己又把锁解了,那为什么加锁啊?

           2、当收到信号后,自己已经苏醒了,为什么又pthread_mutex_lock(&mutex)锁上。

(4)、对于第一个问题,我是这样理解的,pthread_cond_wait 之前加锁,是因为,如果有多个线程同时pthread_cond_wait,那么就要有个先后,所以加锁。而在pthread_cond_wait后解锁,当然是希望有其他的线程,能获得这把锁然后发送信号使自己苏醒。

         对于第二问题,就是一个恢复现场的问题了。

原创粉丝点击