2016-05-01 15 views
-1

Ich entwickle eine Anwendung in C wo in Thread A warten müssen auf drei Ereignisse (wie Empfang von Daten) von 3 verschiedenen Threads nämlich B, C, D. Ich bin für ein einzelnes Ereignis implementieren kann mit pthread_cond_wait, pthread_cond_signal und Mutex aber ich möchte dieses Konzept auf mehrere Ereignisse variable und einzigen Mutex mit Single Zustand erweitern. Kann jemand bitte mir helfen, dieses Problem zu lösen.mehrere Bedingungsvariablen in c

Vielen Dank im Voraus.

+1

Klingt wie Sie könnten ein Semaphor verwenden. Aber Ihre Frage ist sowohl zu breit als auch in spezifischen Details, so dass sie schwer zu beantworten ist. – kaylum

+0

Producer-Consumer-Warteschlange. –

+0

Ziemlich klar für mich, was gefragt wurde. Abstimmung zum erneuten Öffnen – caf

Antwort

0

Es gibt wirklich nichts heikel es: für eine Veranstaltung vorausgesetzt, Sie Code in Thread A haben wie:

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

/* Process Event B */ 

mit Code in Thread B wie:

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

Dann gilt für drei Veranstaltungen, Sie würde den Faden A auf

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 */ 
} 

mit den Fäden C und D ändern, die wie Faden B funktionieren (außer Einstellung die entsprechende Flagge).

+0

Vielen Dank. Es hat mir sehr geholfen – Harry