gpt4 book ai didi

c - pthread_cond_wait() 如何工作

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:45 26 4
gpt4 key购买 nike

我正在使用 pthread_cond_wait() 但我仍然不确定它是如何工作的。我有更多线程,可以完成这项工作:

pthread_mutex_lock(&mutex);
while(count() == 0){
pthread_cond_wait(&signal, &mutex);
}
//some critical section
pthread_mutex_unlock(&mutex);

然后我有一个主线程,我在其中调用函数pthread_signal(&signal)

signal 之后有多少线程被唤醒?这是正确的代码段吗?

最佳答案

I'm using pthread_cond_wait() and I'm still not sure how It works.

这似乎不明智。

Then I have a main thread where I call function pthread_signal(&signal)

How much threads are waked up after signal ?

pthread_cond_signal() 唤醒至少一个当前等待条件变量的线程,前提是有任何这样的线程要唤醒。如果在没有线程可唤醒时调用,则它没有可观察到的效果。

如果有多个线程可用于唤醒,则可以唤醒多个线程,但通常预期只有一个线程会被唤醒。然而,由于虚假唤醒也是可能的,因此正确说明 pthread_cond_wait()pthread_cond_signal() 行为的全部范围的代码将具有正确的语义,无论有多少线程被唤醒,并且在接口(interface)的这一侧实际上不可能区分哪些线程和多少线程被信号唤醒,哪些线程被虚假唤醒。

It's correct segment of code ?

您提供的代码摘录似乎展示了使用条件变量的正确形式。特别是,总是有必要在等待之前和醒来之后但在继续之前检查与 CV 关联的谓词。您的代码正确地做到了这一点,假设 count() == 0 是正确的谓词。

但是,您的整个程序是否正确使用互斥锁和条件变量是一个单独的问题,而且您没有提供足够的信息来回答它。有时,像您这样的线程需要在离开临界区之前向条件变量发出信号。也可能是您希望主线程执行 pthread_cond_broadcast() 而不是 pthread_cond_signal()。还有很多其他的可能性。

关于c - pthread_cond_wait() 如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43526053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com