2016-05-01 6 views
-1
с

я разработка приложения в C, где в потоке должен ждать в течение трех событий (например, прием данных) из 3-х различных нитей, а именно B, C, D. Я в состоянии реализовать для одного события, используя pthread_cond_wait, pthread_cond_signal и мьютекса, но я хочу, чтобы расширить эту концепцию на нескольких событий с помощью одной переменных и условия одного семафора. Может кто-нибудь, пожалуйста, помогите мне в решении этой проблемы.множественные переменные условия в

Заранее спасибо.

+1

Похоже, что вы можете использовать семафор. Но ваш вопрос слишком широк, а также не хватает конкретных деталей, поэтому трудно ответить. – kaylum

+0

Продюсер-потребительская очередь. –

+0

Довольно ясно, что меня спрашивали. Голосование для повторного открытия. – caf

ответ

0

Там действительно ничего сложно ему: предполагая одно событие у вас есть код в потоке А, как:

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); 

Тогда для трех событий, вы изменит резьбу А на:

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 (кроме настройки соответствующий флаг).

+0

спасибо. Это очень помогло мне – Harry

Смежные вопросы