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 - Jerônimo C. Pellegrini<br />

11.6 memória transacional<br />

Sistemas que suportam memória transacional oferecem primitivas para iniciar e terminar<br />

transações <strong>com</strong> semântica semalhante à de begin-transaction e <strong>com</strong>mit, <strong>com</strong>uns em sistemas<br />

gerenciadores de bases de dados [43, 44]. Uma exposição mais <strong>com</strong>pleta sobre o assunto<br />

pode ser encontrada no livro de Harris e outros [45].<br />

Uma implementação de <strong>Scheme</strong> <strong>com</strong> suporte a memória transacional 6 poderia oferecer<br />

a forma especial atomically:<br />

( atomically<br />

( let ((x ( standard-deviation vec ))<br />

(y (* x z )))<br />

( set ! a (+ a x ))))<br />

Outra possibilidade é exigit que o programador indique explicitamente as variáveis<br />

usadas em cada transação:<br />

( let ((x #f)<br />

(y #f))<br />

( atomically-with (x y)<br />

( set ! x ( standard-deviation vec ))<br />

( set ! y (* x z))<br />

( set ! a (+ a x ))))<br />

A forma especial atomically-with marcaria as variáveis X e y, já existentes no contexto<br />

léxico daquela forma, de forma que todas as modificações nelas façam parte da<br />

transação.<br />

Seria interessante também definir sintaxe para o caso em que as variáveis estão sendo<br />

introduzidas, <strong>com</strong> uma variante de let:<br />

( atomically-let ((x ( standard-deviation vec ))<br />

( set ! a (+ a x )))<br />

(y (* x z )))<br />

Versão Preliminar<br />

6 Independente de haver ou não suporte por hardware.<br />

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

259

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

Saved successfully!

Ooh no, something went wrong!