c中的多个条件变量

时间:2016-05-01 05:41:06

标签: c pthreads

我正在用C开发一个应用程序,其中线程 A 必须等待来自3个不同线程的三个事件(如接收数据),即 B,C,D 。我可以使用 pthread_cond_wait pthread_cond_signal 互斥来实现单个事件,但我想使用单个条件变量将此概念扩展为多个事件和单个互斥。有人可以帮我解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

对它来说真的没什么棘手的:假设一个事件你在线程A中有代码:

pthread_mutex_lock(&lock);
while (!event_b_pending)
    pthread_cond_wait(&cond, &lock);

/* Process Event B */

使用线程B中的代码:

pthread_mutex_lock(&lock);
event_b_pending = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);

然后,对于三个事件,您可以将线程A更改为:

pthread_mutex_lock(&lock);
while (!event_b_pending && !event_c_pending && !event_d_pending)
    pthread_cond_wait(&cond, &lock);

if (event_b_pending)
{
    /* Process Event B */
}

if (event_c_pending)
{
    /* Process Event C */
}

if (event_d_pending)
{
    /* Process Event D */
}

线程C和D像线程B一样工作(除了设置适当的标志)。