c - 唤醒多个条件变量

标签 c multithreading posix

<分区>

通常情况下,我们只能用信号通知一个变量,比如

pthread_cond_signal (condition) 

但是,我想同时唤醒多个条件变量。我该怎么做?

换句话说,我可以为信号函数提供一个数组以唤醒存储在该数组中的所有条件变量吗?

   four condition variable : X, Y, Z, T

   I want :  waking up these four condition over sending signal, at the same time

最佳答案

听起来您在实现过程中犯了概念性错误。

您似乎正在尝试共享一个资源,但已将多个条件变量分配给同一资源。

如果您只对一种资源建模,则每个子项不应有不同的条件变量,但所有子项都应共享相同的条件变量。

因此,如果假设它是一个受条件变量 A 保护的队列,所有依赖于 A 的线程都应该执行 pthread_cond_wait(A),这样当您执行 pthread_broadcast(A) 这些线程中的每一个都被唤醒,第一个线程开始处理数据。

如果您真的无法更改您的实现,您可以使用堆栈并弹出第一个 condvar 并插入底部。这将保证只要有足够的数据,就不会有人挨饿。

关于c - 唤醒多个条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10310443/

相关文章:

java - 所有异步任务是否可以同时读取ArrayList而没有任何延迟

c - 带轮询的非阻塞套接字

unix - 有没有像 shm_open() 这样没有文件名的东西?

c - POSIX 中未提及的错误

c - Linux 中 FreeBSD 的 be64enc 和其他 dec/enc 等效函数?

c++ - 无法在 visual studio 2010 中使用函数 posix_memalign

c - 在使用 eof 获取特定输入值时在 c 中获得无限循环

python - PyQt4 在线程中等待来自 GUI 的用户输入

python - 将 for 循环从 c 转换为 python

java - 以线程安全的方式从数组列表返回对象?