通常,我们只能向一个变量发出信号,例如
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
通常,我们只能向一个变量发出信号,例如
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 的线程都应该执行 a pthread_cond_wait(A)
,这样当您执行 a 时,pthread_broadcast(A)
每个线程都会被唤醒,第一个线程可以处理数据。
如果您真的无法更改您的实现,您可以使用堆栈并将第一个 condvar 弹出并插入底部。这将保证只要有足够的数据,就不会有人饿死。
不,您不能使用数组向它们发出信号。您必须在要发出信号的每个变量上调用 pthread_cond_signal。
如果您不需要任何其他条件,但同时唤醒所有孩子,您可以只使用一个条件变量,然后发出 a pthread_cond_broadcast()
唤醒所有等待这个条件变量的孩子。