我正在用C开发一个应用程序,其中线程 A 必须等待来自3个不同线程的三个事件(如接收数据),即 B,C,D 。我可以使用 pthread_cond_wait , pthread_cond_signal 和互斥来实现单个事件,但我想使用单个条件变量将此概念扩展为多个事件和单个互斥。有人可以帮我解决这个问题。
提前致谢。
答案 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一样工作(除了设置适当的标志)。