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 />

manter duas threads executando: uma prepara o cenário do próximo quadro enquanto<br />

outra mostra o cenário atual na tela. A primeira que terminar deve esperar a outra.<br />

No exemplo a seguir, a thread A não pode executar a 3 antes que B tenha executado<br />

b 2<br />

Thread A:<br />

Thread B:<br />

a 1<br />

b 1<br />

a 2<br />

b 2<br />

a 3<br />

Uma solução é criar dois semáforos e usá-los para indicar que as duas threads já<br />

chegaram ao ponto de encontro. A thread que chegar primeiro informa a outra (chamando<br />

signal em seu próprio semáforo) e espera que o semáforo da outra seja incrementado:<br />

Thread A:<br />

Thread B:<br />

a 1<br />

b 1<br />

a 2<br />

signal bOK<br />

signal aOK<br />

wait aOK<br />

wait bOK<br />

b 2<br />

a 3<br />

11.3.2 Exemplo: produtor-consumidor<br />

O problema do produtor-consumidor foi descrito na seção 10.2.1. O <strong>com</strong>portamento de<br />

ambos é mostrado novamente a seguir.<br />

Função produtor<br />

repita sempre<br />

e ← gera_evento<br />

adiciona buffer, e<br />

Função consumidor<br />

repita sempre<br />

e ← retira buffer<br />

Versão Preliminar<br />

processa e<br />

246<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!