第一眼看到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后解锁,当然是希望有其他的线程,能获得这把锁然后发送信号使自己苏醒。
对于第二问题,就是一个恢复现场的问题了。