通常情况下,我们只能用信号通知一个变量,比如
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 并插入底部。这将保证只要有足够的数据,就不会有人挨饿。