【发布时间】:2016-06-21 04:11:12
【问题描述】:
我使用条件编写了简单的 pthread 示例来同步两个线程。在某些情况下,在等待之前调用信号并永远等待线程锁定。
有没有办法在等待之前检测信号?
void *Thread1(void *args){
sleep(1);
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond,&mutex);
pthread_mutex_unlock(&mutex);
}
void *Thread2(void *args){
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
【问题讨论】:
-
使用 pthread_cond_timedwait 避免永远等待?
-
我使用条件来处理作业列表并且无法计算等待时间,但您的想法很好。我可以保存工作状态并在一段时间内使用 pthread_cond_timedwait,这是最新的选择吗?
-
感谢 pilcrow 的关注,但没有。
-
@MohsenTi,我同意乍一看这个问题看起来不一样。但是,我认为您要问的是,“我如何正确使用条件变量来暂停线程,直到另一个线程说'OK',如果事情已经'OK',则跳过该暂停?”与这里一样,那里的主要见解是,您需要一个受互斥锁保护并在循环中检查的单独谓词。
标签: c++ multithreading pthreads conditional-statements