[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Discussao interessante sobre broadcast



Olá Pessoal,
  Gostaria apenas de adicionar o seguinte a discussão do Guilherme
com o aluno misterioso. Uma solução é a dada abaixo.

 > Suponha que VÁRIOS consumidores tenham o código:
 > 
 > pthread_mutex_lock(&mutex_acesso_ao_buffer);
 > pthread_cond_wait(&cond_buffer_tem_algo, &mutex_acesso_ao_buffer);
 > faz algo com o conteúdo do buffer;
 > pthread_mutex_unlock(&mutex_acesso_ao_buffer);
 > 
 > E o produtor:
 > 
 > pthread_mutex_lock(&mutex_acesso_ao_buffer);
 > coloca algo no buffer;
 > pthread_cond_signal(&cond_buffer_tem_algo);
 > pthread_mutex_unlock(&mutex_acesso_ao_buffer);

Caso queira se trocar o signal pelo broadcast (que suponho equivalente
ao signalall), uma alternativa é proteger o wait com um while da seguinte
forma:

 > pthread_mutex_lock(&mutex_acesso_ao_buffer);
 > while (buffer vazio)
 >   pthread_cond_wait(&cond_buffer_tem_algo, &mutex_acesso_ao_buffer);
 > faz algo com o conteúdo do buffer;
 > pthread_mutex_unlock(&mutex_acesso_ao_buffer);

Alfredo