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

ping<br />

pong<br />

(resume pong<br />

’hello)<br />

(resume ping<br />

’hello)<br />

8.6 multitarefa não-preemptiva<br />

(resume pong<br />

’hello)<br />

. . .<br />

Uma das mais importantes aplicações de continuações é a implementação de threads.<br />

Nesta seção desenvolveremos um sistema multitarefa simples usando continuações.<br />

Guardaremos os processos em uma lista:<br />

( define processos ’())<br />

Para adicionar o argumento à lista processos definimos enfilera-processo.<br />

( define enfilera-processo<br />

( lambda ( proc )<br />

( set ! processos ( append processos ( list proc )))))<br />

O procedimento start retira um processo da lista e o excuta.<br />

( define start<br />

( lambda ()<br />

( let ((p ( car processos )))<br />

( set ! processos ( cdr processos ))<br />

(p ))))<br />

Pause se lembra de onde estava, inclui o contexto atual no final da fila, depois chama<br />

start (pega o proximo).<br />

( define pause<br />

( lambda ()<br />

( call /cc<br />

Versão Preliminar<br />

( lambda (k)<br />

( enfilera-processo ( lambda () (k #f )))<br />

( start )))))<br />

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