08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

notas de aula - Jerônimo C. Pellegrini<br />

Cada thread chama monitor/espera_barreira na posição do código onde deve haver<br />

a sincronização. As n − 1 primeiras threads chamarão wait e esperarão; quando a n-ésima<br />

thread chegar, chamará signal e acordará todas as outras 5 .<br />

a 3 :<br />

O algoritmo a seguir mostra uma thread onde a barreira está entre as instruções a 2 e<br />

a 1<br />

a 2<br />

monitor/espera_barreira<br />

a 3<br />

11.5.5 Exemplo: jantar dos filósofos<br />

Uma solução simples para o problema do jantar dos filósofos usando monitores é emular<br />

semáforos <strong>com</strong> um monitor por garfo. Assim é possível implementar as duas soluções já<br />

vistas para o problema (a solução <strong>com</strong> quatro filósofos <strong>com</strong>endo e a solução <strong>com</strong> filósofos<br />

assimétricos).<br />

11.5.6 Monitores em Java<br />

A classe Object em Java implementa um monitor – e portanto qualquer objeto Java pode<br />

ser usado <strong>com</strong>o monitor. Uma thread que chama o método wait de um objeto é bloqueada<br />

imediatamente e colocada em uma fila de threads associada àquele objeto. Quando outra<br />

thread chama o médodo notify deste mesmo objeto, uma das threads em sua fila é<br />

acordada. Se o método notifyAll de um objeto é chamado, todas as threads da fila de<br />

um objeto são acordadas.<br />

Em Java não há variáveis de condição. Cada objeto tem uma única fila, e os métodos<br />

wait e notify operam sobre esta fila.<br />

5 Em Java o laço “para todo” não é necessário: basta usar notifyAll ao invés de notify<br />

Versão Preliminar<br />

258<br />

[ 27 de outubro de 2010 at 15:47 ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!