在此链接here中,在递增函数中,条件变量在实际递增计数(从零开始)之前发出信号。信号在递增计数之后是否应该被调用?或者在decrement_count函数中的等待调用不会返回,直到在increment_function中释放互斥量为止?条件变量信号发送
pthread_mutex_t count_lock;
pthread_cond_t count_nonzero;
unsigned count;
decrement_count()
{
pthread_mutex_lock(&count_lock);
while (count == 0)
pthread_cond_wait(&count_nonzero, &count_lock);
count = count - 1;
pthread_mutex_unlock(&count_lock);
}
increment_count()
{
pthread_mutex_lock(&count_lock);
if (count == 0)
pthread_cond_signal(&count_nonzero);
count = count + 1;
pthread_mutex_unlock(&count_lock);
}
因此,递减函数中的等待调用不会返回,直到条件变量发出信号并且互斥量在增量函数中解锁为止? – Kamal
正确的是,当进入cond等待时,它释放互斥锁,当它再次唤醒时,它会再次锁定互斥锁,因为互斥锁被锁定在缓存函数中,cond不会被唤醒直到其解锁。 – goji