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

Jerônimo C. Pellegrini<br />

O procedimento enfilera-processo inclui uma função que adiciona à lista o (let ...)<br />

que:<br />

• Primeiro, inclui a si mesmo no fim da fila e passa o controle para o primeiro da fila;<br />

• Depois faz algo;<br />

• Por último, chama a si mesmo (entra em loop).<br />

( enfilera-processo<br />

( lambda ()<br />

( let f ()<br />

( pause )<br />

( display "O")<br />

(f ))))<br />

O procedimento enfilera-processo é usado para incluir tarefas na lista:<br />

( for-each enfilera-processo<br />

( list ( lambda () ( let f () ( pause ) ( display "l") (f )))<br />

( lambda () ( let f () ( pause ) ( display "a’") (f )))<br />

( lambda () ( let f () ( pause ) ( display "!") (f )))<br />

( lambda () ( let f () ( pause ) ( newline ) (f )))))<br />

E o procedimento start <strong>com</strong>eça a processar as tarefas:<br />

(start)<br />

Na primeira chamada, cada processo chama pause e reinclui a si mesmo na fila; na<br />

segunda, já <strong>com</strong>eçam os displays.<br />

Esta seção trata apenas do mecanismo que intercala os processos, dando a ilusão<br />

de que executam em paralelo. Um sistema de threads precisa também oferecer mecanismos<br />

para garantir que os processos trabalhem de maneira ordenada, sem que o estado<br />

das variáveis globais fique inconsistente. O Capítulo 10 tratará de threads <strong>com</strong> mais<br />

profundidade.<br />

Versão Preliminar<br />

8.7 o goto funcional e cuidados <strong>com</strong> continuações<br />

A seguinte chamada a call/cc ilustra um fato importante a respeito de continuações.<br />

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

211

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

Saved successfully!

Ooh no, something went wrong!