[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: duvidas depois do ep



On Mon, 21 May 2001, Paulo Eduardo Azevedo Silveira wrote:

> 1-) O ep deveria manter os clientes em FIFO? Isso eh, o cara que chegou
> antes e sentou obrigatoriamente tinha de cortar o cabelo antes ou poderia
> ser uma anarquia geral (meu caso)

O atendimento aos clientes não precisa ser FIFO.

> 2-) Quando a gente aguarda um sinal
> 
> while (saida_barbeiro_desocupado) {
>   pthread_cond_wait (cond_barbeiro_desocupado, mutex);
> }
> 
> Esse while() serve para tomar conta do caso em que o barbeiro acorda,
> manda o sinal, ai o cliente vai se sentar na cadeira livre, porem um outro
> cliente chega rapidinho e senta ja que ele ve o barbeiro desocupado, eh
> isso?

Sim. Mais detalhadamente: como pthreads usa a disciplina signal and
continue, a thread barbeiro que der um signal continua rodando (e dentro
do monitor). Por isso a thread cliente acordada pelo signal não pode rodar
imediatamente. Ela vai para o conjunto de espera associado ao mutex do 
monitor. Quando a thread barbeiro, que deu o signal, sair do monitor, uma
das threads esperando nesse mutex entra no monitor. Pode não ser a thread
cliente acordada pelo signal... Se quem entrar no monitor for alguma outra
thread cliente, ela pode ocupar a cadeira do barbeiro.

> 
> 3-) Pela definicao de monitor, nao podem ter 2 threads acessando uma mesma
> procedure (com a excessao de uma thread estar num wait()), ateh ai tudo
> bem, acho legal a ideia, mas com isso voce nao ta travando coisas que nao
> precisariam ser travadas?

Talvez. Para evitar isso é bom que o monitor não englobe muita coisa.
Se um monitor estiver travando coisas que não precisariam ser travadas,
deve-se tentar parti-lo em monitores menores.

> 4-) Nao entendi a vantagem do Java utilizar Signal and Continue.

Pthreads também usa. A disciplina signal and continue é a mais popular
atualmente. Só ela que tem broadcast signal (notifyAll, em Java).

Reverbel