调用 pthread_cond_signal(...) 然后调用 pthread_cond_wait(...) 会唤醒服务员吗?
Will calling pthread_cond_signal(...) then calling pthread_cond_wait(...) wake up the waiter?
所以我在网上搜索了一些答案,但似乎没有任何明确的答案。我的问题很简单,比方说,我需要 5 个工作线程进入一个队列,然后向它们的老板线程(线程 6)发出信号,表明它们都在队列中准备工作。由于我程序的其余部分的工作方式,如果我想要完成的事情确实有效,那将是最好的,也就是说:
所以如果我让老板线程命中锁,看到队列没有完全满,老板会pthread_cond_wait(...);
等到它满了。现在,所有工作线程都将进入队列并等待,一旦最后一个线程进入,他将向主线程发出信号,然后等待。那么在最后一个工人发出信号到他等待的时候,老板还会等到最后一个助手到达等待之间吗?因为我不希望老板在最后一个线程真正等待之前做任何事情。所以最后一个线程将 而不是 击中 pthread_mutex_unlock(...)
他将击中 pthread_cond_wait(...)
我想验证这会唤醒我们老板。在此先感谢,我希望我的问题很清楚,我倾向于过度解释一切:/
老板可以等待工人发出的信号n次。每次醒来时,它都会检查队列长度,如果未满则再次等待。
在这种情况下最好使用信号量。
如果 "boss thread" 在 pthread_cond_wait()
中被阻塞,它无法继续执行,直到它可以重新获取传递给该函数的互斥锁。
因此,如果向老板线程发出信号的线程持有该互斥锁,则老板线程将不会继续,直到发信号的线程释放互斥锁 - 这可以通过 pthread_mutex_unlock()
或 pthread_cond_wait()
(等待时释放互斥量)。
所以我在网上搜索了一些答案,但似乎没有任何明确的答案。我的问题很简单,比方说,我需要 5 个工作线程进入一个队列,然后向它们的老板线程(线程 6)发出信号,表明它们都在队列中准备工作。由于我程序的其余部分的工作方式,如果我想要完成的事情确实有效,那将是最好的,也就是说:
所以如果我让老板线程命中锁,看到队列没有完全满,老板会pthread_cond_wait(...);
等到它满了。现在,所有工作线程都将进入队列并等待,一旦最后一个线程进入,他将向主线程发出信号,然后等待。那么在最后一个工人发出信号到他等待的时候,老板还会等到最后一个助手到达等待之间吗?因为我不希望老板在最后一个线程真正等待之前做任何事情。所以最后一个线程将 而不是 击中 pthread_mutex_unlock(...)
他将击中 pthread_cond_wait(...)
我想验证这会唤醒我们老板。在此先感谢,我希望我的问题很清楚,我倾向于过度解释一切:/
老板可以等待工人发出的信号n次。每次醒来时,它都会检查队列长度,如果未满则再次等待。 在这种情况下最好使用信号量。
如果 "boss thread" 在 pthread_cond_wait()
中被阻塞,它无法继续执行,直到它可以重新获取传递给该函数的互斥锁。
因此,如果向老板线程发出信号的线程持有该互斥锁,则老板线程将不会继续,直到发信号的线程释放互斥锁 - 这可以通过 pthread_mutex_unlock()
或 pthread_cond_wait()
(等待时释放互斥量)。