c - 调用 pthread_cond_signal(...) 然后调用 pthread_cond_wait(...) 会唤醒服务员吗?

标签 c multithreading pthreads

所以我在网上搜索了一些答案,但似乎没有什么可以清楚地回答它。我的问题很简单,比如说,我需要 5 个工作线程进入队列,然后向它们的主线程(线程 6)发出信号,表明它们都在队列中准备工作。由于我的程序的其余部分的工作方式,如果我想要完成的事情确实有效,那就最好了,也就是说:

因此,如果我让老板线程锁定,看到队列没有完全满,老板将pthread_cond_wait(...);并等待,直到它已经满了。现在,所有工作线程将进入队列并等待,一旦最后一个线程进入,他将向主线程发出信号,然后等待。那么,在最后一个 worker 发出信号通知他等待时,老板还会等到最后一个助手到达等待吗?因为我不希望老板在最后一个线程真正等待之前做任何事情。因此,最终线程将不会命中 pthread_mutex_unlock(...) 他将命中 pthread_cond_wait(...) 并且我想要验证一下这会吵醒我们老大。预先感谢,我希望我的问题很清楚,我倾向于过度解释一切:/

最佳答案

老板可以等待 worker 发送的信号n次。每次醒来时,它都会检查队列长度,如果未满则再次等待。 在这种情况下最好使用信号量。

关于c - 调用 pthread_cond_signal(...) 然后调用 pthread_cond_wait(...) 会唤醒服务员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530283/

相关文章:

c - pthread_create 可以创建的最大线程数是多少?

c - 进程在用户空间和内核空间执行

c - 如何正确使用SetServiceStatus告诉Windows我的服务正在停止?

c++ - 多线程和获取错误调用函数

java - 多线程:分配和阻塞资源的问题

c - 当从单独的线程调用时,如何从 fgets 获得正确的输出?

ios - 杀死一个用 dispatch_sync 锁定的线程

c++ - libpthread.so 在 `dlclose()` 之后继续使用 TLS 空间和 DL 命名空间

C#:如何将嵌套结构从 C 转换为 C#?

c - fadvise vs madvise?我可以同时使用两者吗?