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

11 M E M Ó R I A C O M PA R T I L H A DA<br />

Quando a <strong>com</strong>unicação entre processos se dá por memória <strong>com</strong>partilhada é necessário<br />

usar algoritmos para garantir que seja possível acessar variáveis <strong>com</strong>partilhadas sem<br />

condições de corrida. Há trechos de código que realizam acesso a variáveis <strong>com</strong>partilhadas<br />

entre threads de tal maneira que se mais de uma thread executar tal trecho, uma condição<br />

de corrida pode levar as variáveis a um estado inconsistente. Estes trechos de código são<br />

chamados de seções críticas.<br />

11.1 travas (locks) de exclusão mútua<br />

Uma solução para exclusão mútua é exigir que cada thread que pretenda usar um recurso<br />

<strong>com</strong>partilhado adquira uma trava, ou lock antes de acessar o recurso, e a libere logo<br />

depois:<br />

( define deposita<br />

( lambda ( conta valor )<br />

( lock ! conta )<br />

( set-saldo ! conta (+ ( saldo conta ) valor ))<br />

( unlock ! conta )))<br />

Os procedimentos lock! e unlock! seriam usados para travar e destravar o acesso à<br />

variável conta: quando uma thread executa (lock! x), ela passa a deter o acesso à trava<br />

x, e outras threads só conseguirão acesso a esta trava quando a primeira thread liberá-la<br />

<strong>com</strong> unlock!<br />

Os procedimentos lock! e unlock! são grafados <strong>com</strong> o ponto de exclamação no final<br />

porque necessariamente causam efeito colateral, modificando o estado (oculto) de alguma<br />

estrutura.<br />

Versão Preliminar<br />

Há diferentes maneiras de implementar as operações para adquirir e liberar locks. Os<br />

procedimentos lock! e unlock! podem ser construídos usando diferentes algoritmos –<br />

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

239

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

Saved successfully!

Ooh no, something went wrong!