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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

O produtor e o consumidor executam os laços simples mostrados 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 />

processa e<br />

10.2.2 Jantar dos Filósofos<br />

Para ilustrar o problema da sincronização entre procesoss, Edsger Dijkstra descreveu<br />

uma situação em que cinco processos tentam adquirir cinco recursos <strong>com</strong>partilhados.<br />

Para descrever esta situação usa-se <strong>com</strong>o analogia um jantar de cinco filósofos. Os cinco<br />

filósofos sentam-se a uma mesa redonda, cada um <strong>com</strong> um prato à sua frente, e entre<br />

cada dois pratos há um garfo (a Figura 10.3 mostra um diagrama da mesa). Os filósofos<br />

só conseguem <strong>com</strong>er <strong>com</strong> dois garfos de cada vez, e portanto não há garfos para todos;<br />

quando um filósofo não estiver <strong>com</strong>endo, permanecerá pensando. Encontrar um algoritmo<br />

para permitir que todos os filósofos <strong>com</strong>am sem que haja deadlock ou starvation é um<br />

bom exercício, embora aparentemente um exercício inútil e distante da realidade 2 . Os<br />

problemas enfrentados e as técnicas utilizadas são os mesmos presentes na atividade de<br />

programação concorrente “no mundo real”.<br />

Versão Preliminar<br />

2 A analogia talvez não tenha sido a melhor possível – não há notícia de muitas pessoas que <strong>com</strong>am macarrão<br />

<strong>com</strong> dois garfos, menos ainda de pessoas que <strong>com</strong>partilhem garfos <strong>com</strong> dois vizinhos durante uma refeição.<br />

Pode-se ainda questionar se os filósofos nunca se saciarão, por exemplo. No entanto, por mais alheia que<br />

seja à realidade (ou talvez por isso), a analogia foi bem-sucedida, uma vez que consta de quase todo livro a<br />

respeito de programação concorrente.<br />

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