假设某个条件变量“cond”与互斥变量“mutex”相关联。如果一个线程在调用 pthread_cond_wait(&cond,&mutex)
后在 cond
上休眠,而另一个已锁定 mutex
的线程已完成,这有关系吗该线程是在调用 pthread_mutex_unlock(&mutex)
之前还是之后调用 pthread_cond_signal(&cond)
?如果它调用 pthread_cond_signal(&cond)
,它是否甚至需要解锁互斥量,因为休眠线程无论如何都会获取互斥量?
编辑:根据 https://computing.llnl.gov/tutorials/pthreads/#ConVarOverview , “在调用 pthread_cond_signal() 后未能解锁互斥量可能不允许匹配的 pthread_cond_wait() 例程完成(它将保持阻塞状态)。”我想那么,解锁,也许只有在之后,才是必需的。
最佳答案
在调用 pthread_cond_signal
后,您应该始终解锁互斥量。以下是一些值得阅读的好问题/答案:
Calling pthread_cond_signal without locking mutex
我现在不会想到它,但我很确定有一个很好的理由(就竞争条件而言)您不想在发出信号之前解锁互斥量。
关于c - 向条件变量发出信号(pthreads),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175435/