c语言中的多条件变量

c语言中的多条件变量,c,pthreads,C,Pthreads,我正在用C开发一个应用程序,其中线程A必须等待来自三个不同线程的三个事件(如数据接收),即B、C、D。我可以使用pthread_cond_wait、pthread_cond_signal和互斥体来实现单个事件,但我想使用单个条件变量和单个互斥体将此概念扩展到多个事件。有人能帮我解决这个问题吗 提前感谢。其实没有什么棘手的事情:假设某个事件的线程中有如下代码: pthread_mutex_lock(&lock); while (!event_b_pending) pthread_c

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


提前感谢。

其实没有什么棘手的事情:假设某个事件的线程中有如下代码:

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类似(除了设置适当的标志)。

实际上没有什么棘手的事情:假设有一个事件,线程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类似(除了设置适当的标志)。

听起来您可以使用信号量。但你的问题太宽泛,也缺乏具体的细节,所以很难回答。生产者-消费者排队。我很清楚你问了什么。投票重新开放。听起来你可以用信号灯。但你的问题太宽泛,也缺乏具体的细节,所以很难回答。生产者-消费者排队。我很清楚你问了什么。投票重新开放。非常感谢。这真的帮了我很大的忙,非常感谢你。这真的帮了我很大的忙