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

12 PA S S AG E M D E M E N S AG E N S<br />

Programas concorrentes podem ser elaborados sem o uso de memória <strong>com</strong>partilhada,<br />

mantendo para cada processo um espaço de endereçamento próprio e um <strong>com</strong>portamento<br />

relativamente independente. A sincronização entre processos se dá, então, por troca de<br />

mensagens. Este Capítulo aborda esta abordagem.<br />

Usando semáforos, construiremos diferentes mecanismos para troca de mensagens,<br />

e depois mudaremos o foco para o uso destes mecanismos. No final do Capítulo discutiremos<br />

duas idéias que podem, dependendo do ponto de vista, serem descritas <strong>com</strong>o<br />

paradigmas de programação: o CSP e o modelo Actor. O leitor encontrará uma discussão<br />

de programação <strong>com</strong> passagem de mensagens em maior profundidade no livro de<br />

Andrews [40].<br />

12.1 mensagens assíncronas<br />

Mensagens são enviadas de um processo a outro através de canais. Em um canal as<br />

mensagens permanecem na ordem em que foram incluídas, até que sejam retiradas.<br />

Quando a leitura e escrita de mensagens podem ser feitas por quaisquer processos,<br />

chamaremos os canais de mailboxes.<br />

Usaremos as seguintes primitivas para trabalhar <strong>com</strong> mailboxes:<br />

• (mailbox-send! mailbox msg) envia a mensagem msg para mailbox. O processo<br />

que enviou a mensagem não precisa ficar bloqueado;<br />

• (mailbox-receive! mailbox [timeout [default]]) retira uma mensagem de mailbox<br />

e a retorna. Se não houver mensagem disponível, a thread ficará bloqueada até<br />

que uma mensagem chegue naquela caixa postal. Se timeout for definido, a thread<br />

ficará bloqueada somente até que o prazo se esgote. Quando um prazo se esgotar,<br />

Versão Preliminar<br />

o valor default será retornado ou, se não houver default espeficado, uma exceção<br />

será levantada;<br />

[ 27 de outubro de 2010 at 15:47 ]<br />

269

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

Saved successfully!

Ooh no, something went wrong!