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

Jerônimo C. Pellegrini<br />

( lambda ( datum )<br />

( mutex-lock ! writers-right )<br />

( set ! data-left datum )<br />

( semaphore-signal-by ! read-left-ok 1)<br />

( semaphore-wait ! write-right-ok )<br />

( mutex-unlock ! write-right )))<br />

( write-left<br />

( lambda ( datum )<br />

( mutex-lock ! writers-left )<br />

( set ! data-right datum )<br />

( semaphore-signal-by ! read-right-ok 1)<br />

( semaphore-wait ! write-left-ok )<br />

( mutex-unlock ! writers-left )))<br />

( read-right<br />

( lambda ()<br />

( semaphore-signal-by ! write-left-ok 1)<br />

( semaphore-wait ! read-right-ok )<br />

data-right ))<br />

( read-left<br />

( lambda ()<br />

( semaphore-signal-by ! write-right-ok 1)<br />

( semaphore-wait ! read-left-ok )<br />

data-left )))<br />

( list ( cons read-left write-left )<br />

( cons read-right write-right ))))))<br />

Versão Preliminar<br />

O fecho retorna uma célula cons onde o car é o canal da esquerda e o cadr é o canal<br />

da direita; podemos então usar car e cadr para acessar as duas pontas:<br />

( define channel-left car )<br />

( define channel-right cadr )<br />

Os procedimentos e ! simplesmente chamam os fechos que, na definição de<br />

make-channel, tinham os nomes de read-left, read-right, write-left e write-right:<br />

( define <br />

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

285

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

Saved successfully!

Ooh no, something went wrong!