C- pthreads_cond_wait()的工作方式



我正在使用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()。还有许多其他可能性。

相关内容

  • 没有找到相关文章

最新更新