在 C 中的循环中重用条件变量

Posted

技术标签:

【中文标题】在 C 中的循环中重用条件变量【英文标题】:Reusing a Conditional Variable in a Loop in C 【发布时间】:2020-09-26 13:45:53 【问题描述】:

是否可以在循环中重复使用条件变量?我试图创建一个线程池,每当轮到线程时,主线程就会使用条件变量发出信号。一开始,线程会等待信号,然后,它会完成它的工作并继续循环直到循环结束。我在下面试过这个

// one of the threads in the thread pool
while(a condition)
   pthread_cond_wait(&cond, &lock);       
   pthread_mutex_lock(&lock);
   // job
   pthread_mutex_unlock(&lock);


// in main thread, whenever a condition happens
// for a specific thread, main thread signals using condition variable
pthread_cond_signal(&cond);

这段代码有什么问题?

【问题讨论】:

pthread_cond_wait 接受两个参数。 谢谢,我忘了写在这里。我加了。 问题不是语法问题。执行时出现死锁。 我问正是因为这很重要。等待后您正在锁定互斥锁。这没有任何意义。您需要重新阅读条件变量的工作原理。 你不应该在等待条件变量之前锁定互斥锁吗? 【参考方案1】:

感谢大家回答这个问题。我收集了您的答案和我在网上找到的资源,并为我自己的问题找到了解决方案。顺序应该是这样的:

// thread1
pthread_mutex_lock(&lock);
pthread_cond_wait(&cond, &lock);
// job
pthread_mutex_unlock(&lock);

// main thread
pthread_mutex_lock(&lock);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);

【讨论】:

以上是关于在 C 中的循环中重用条件变量的主要内容,如果未能解决你的问题,请参考以下文章

Javascript语法,变量类型,条件,循环语句,函数,面向对象

python之最强王者——变量,条件语循环语句

unity定时器invokerepeating 时间可以是变量么

1、 C语言三个循环语句分别是 语句, 语句和 语句

4.循环结构

C语言循环函数用法