我正在尝试熟悉pthread库。现在我正在阅读条件变量(pthread_cond_t),所以我对它是如何工作有疑问。
我找到了一些使用pthread_cond_t结构的简单示例的源代码(在这里回答https://stackoverflow.com/a/525841/3008684,在那里回答示例4-8 https://docs.oracle.com/cd/E19455-01/806-5257/6je9h032r/index.html)。它看起来像这样:
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);
}
正如您在两种方法中看到的那样,使用相同的count_lock对象。我的问题是为什么它不会导致僵局? 想象一下一个简单的情况:
提前感谢任何解释!