唤醒多个条件变量

时间:2012-04-25 06:29:58

标签: 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

3 个答案:

答案 0 :(得分:1)

听起来你在实施过程中犯了一个概念上的错误。

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

如果您只为一个资源建模,那么每个孩子都不应该有不同的条件变量,但是所有孩子都应该共享相同的资源。

因此,如果让我们说它是一个受条件变量A保护的队列,所有依赖于A的线程都应该执行pthread_cond_wait(A),这样当你执行pthread_broadcast(A)时,每个线程都会被唤醒并且第一个可以处理数据。

如果你真的无法改变你的实现,你可以使用堆栈并关闭第一个condvar并插入底部。只要有足够的数据,这将保证没有人会饿死。

答案 1 :(得分:0)

不,你不能使用数组发信号。您必须在要发出信号的每个变量上调用pthread_cond_signal。

答案 2 :(得分:0)

如果您不需要其他任何条件但同时唤醒所有孩子,则只能使用一个条件变量,然后发出pthread_cond_broadcast()以唤醒所有等待这个一个条件变量的孩子。