我正试着熟悉p线程库。现在我正在阅读关于条件变量(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对象。我的问题是,它为什么不会导致僵局?想象一下一个简单的情况:
谢谢您的任何解释!
发布于 2014-12-08 00:18:07
pthread_cond_wait解释说,该函数将释放互斥锁,并在条件发出信号后自动恢复它。
https://stackoverflow.com/questions/27349480
复制相似问题