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

13.1.2.1 Criação de processos paralelos<br />

A criação de processos paralelos é essencial em programas concorrentes. O CSP permite<br />

descrever o <strong>com</strong>portamento de processos paralelos de diversas maneiras, mas não sua<br />

criação. De qualquer maneira, é necessário que as linguagens de programação ofereçam<br />

suporte à criação de processos paralelos. O Capítulo 11 já discorreu sobre a criação de<br />

threads em <strong>Scheme</strong>. Em occam, processos paralelos são criados mais livremente, e o<br />

operador que cria processos paralelos é semelhante sintaticamente ao que cria processos<br />

sequenciais:<br />

PAR<br />

x := f(a,b)<br />

y := g(c,d)<br />

O código occam acima executará em paralelo as funções f e g, atribuindo os resultados<br />

a x e y. Já o trecho a seguir:<br />

SEQ<br />

x := f(a,b)<br />

y := g(c,d)<br />

executará a primeira linha <strong>com</strong>pletamente antes da segunda.<br />

Podemos implementar em <strong>Scheme</strong> um forma sintática paralelizante no mesmo espírito<br />

de occam. Já há em <strong>Scheme</strong> a forma begin, <strong>com</strong> função semelhante ao SEQ de occam;<br />

precisamos apenas de uma forma especial parallel, que pudéssemos usar para paralelizar<br />

uma lista de formas:<br />

( parallel<br />

( set ! x (f a b))<br />

( set ! y (g c d )))<br />

A implementação de parallel deve iniciar duas threads e garantir que as duas<br />

tenham terminado antes de terminar. Uma maneira de realizar isto é usando um pool<br />

de threads. Usaremos um procedimento par que recebe uma lista de procedimentos e os<br />

inicia em paralelo. Uma primeira tentativa seria<br />

( define par<br />

Versão Preliminar<br />

( lambda procs<br />

( map add-work-item ! procs )))<br />

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

281

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

Saved successfully!

Ooh no, something went wrong!