当等待的条件不满足时,pthread_cond_wait()内部将执行两个步骤,并保证两个操作的原子性:
1.将当前线程加入条件信号的等待队列。
2.解作为参数传入的锁,解除对临界资源的锁定。
用反证法证明,若去掉锁参数,pthread_cond_wait()将只执行步骤1,则可能的代码如下:
lock();
while(条件不满足)
{
unlock();//#1:解除对临界资源的锁定。
pthread_cond_wait(condA);
当等待的条件不满足时,pthread_cond_wait()内部将执行两个步骤,并保证两个操作的原子性:
1.将当前线程加入条件信号的等待队列。
2.解作为参数传入的锁,解除对临界资源的锁定。
用反证法证明,若去掉锁参数,pthread_cond_wait()将只执行步骤1,则可能的代码如下:
lock();
while(条件不满足)
{
unlock();//#1:解除对临界资源的锁定。
pthread_cond_wait(condA);