在此鏈接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