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

( let (( valor ( random 100)))<br />

(! canal valor ))<br />

( loop ))))<br />

O processo mostra espera por valores do canal e os imprime imediatamente:<br />

( define mostra<br />

( lambda ( canal )<br />

( let loop ()<br />

( let (( valor ( canal )))<br />

( display valor )<br />

( newline ))<br />

( loop ))))<br />

Para executar os processos em paralelo, é necessário primeiro criar um canal e iniciar<br />

os dois processos, passando a cada um deles uma ponta do canal:<br />

( let ((c ( make-channel )))<br />

( let ((a ( channel-left c))<br />

(b ( channel-right c )))<br />

( parallel<br />

( mostra a)<br />

( produz b ))))<br />

Implementaremos um canal <strong>com</strong> fechos. As variáveis nos fechos são dois objetos,<br />

representando os dados disponíveis em cada ponta e quatro semáforos, usados para<br />

controlar o acesso ao canal por um rendez-vous.<br />

( define make-channel<br />

( lambda ()<br />

( let (( data-left #f)<br />

Versão Preliminar<br />

( data-right #f)<br />

( writers-right ( make-mutex ))<br />

( writers-left ( make-mutex ))<br />

( read-left-ok ( make-semaphore 0))<br />

( write-left-ok ( make-semaphore 0))<br />

( read-right-ok ( make-semaphore 0))<br />

( write-right-ok ( make-semaphore 0)))<br />

( let (( write-right<br />

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