我正在使用pthread_cond_wait()
,但我仍然不确定它是如何工作的。我有更多的线程,可以做这项工作:
pthread_mutex_lock(&mutex);
while(count() == 0){
pthread_cond_wait(&signal, &mutex);
}
//some critical section
pthread_mutex_unlock(&mutex);
然后我有一个main thread
,我在其中调用功能pthread_signal(&signal)
signal
之后的waked up
是多少线程?这是代码的正确段?
我正在使用pthread_cond_wait((,但我仍然不确定它是如何工作的。
这似乎是不明智的。
然后我有一个主线程,我调用功能
pthread_signal(&signal)
信号后唤醒了多少线?
pthread_cond_signal()
醒来至少一个线程,目前正在等待条件变量,前提是有任何这样的线程要唤醒。如果在没有线程可唤醒的情况下调用,则没有可观察的效果。
如果有多个线程可唤醒,则可以唤醒多个线程,但是通常的期望是只会唤醒一个。但是,由于伪造的唤醒也是可能的,但是,无论唤醒多少线程,正确地说明pthread_cond_wait()
和pthread_cond_signal()
行为的全部范围的代码都将具有正确的语义,并且在界面的这一侧不可能真正区分信号唤醒了哪个线,哪些线被唤醒,哪些线被唤醒。
这是正确的部分 代码?
您提出的摘录的代码似乎显示了使用条件变量的正确形式。特别是,在等待之前和醒来之前,然后继续进行之前,始终必须检查与简历相关的谓词。您的代码正确执行此操作,假设count() == 0
是正确的谓词。
您的整体程序是否正确使用MUTEX和条件变量是一个单独的问题,但是您尚未提供足够的信息来回答它。有时,像您这样的线程将需要在离开临界部分之前向条件变量发出信号。也许您希望主线程执行pthread_cond_broadcast()
而不是pthread_cond_signal()
。还有许多其他可能性。