首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >P线程库的条件变量示例

P线程库的条件变量示例
EN

Stack Overflow用户
提问于 2014-12-08 00:11:30
回答 1查看 636关注 0票数 1

我正试着熟悉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)。看起来是这样的:

代码语言:javascript
复制
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对象。我的问题是,它为什么不会导致僵局?想象一下一个简单的情况:

  1. 计数等于零
  2. decrement_count被调用,现在count_lock被锁定
  3. 如果计数大于零,则count_lock将被解锁
  4. increment_lock被调用,但由于count_lock目前处于锁定状态而被阻塞。
  5. 僵局?

谢谢您的任何解释!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-08 00:18:07

pthread_cond_wait解释说,该函数将释放互斥锁,并在条件发出信号后自动恢复它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27349480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档