[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