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

Este exemplo expressa o problema através de um mecanismo de memória <strong>com</strong>partilhada,<br />

mas o mesmo problema pode ocorrer usando passagem de mensagens: basta que<br />

se modele a variável global <strong>com</strong>o um processo e que o acesso a ela seja feito através de<br />

mensagens.<br />

Normalmente o problema das seções críticas é resolvido impondo-se a exigência de<br />

que apenas uma thread acesse a variável de cada vez. A isso se dá o nome de exclusão<br />

mútua (é <strong>com</strong>um usar a contração mutex, do Inglês “mutual exclusion”).<br />

10.1.3 Deadlocks<br />

Quando um conjunto de processos fica impossibilidado de prosseguir executando, temse<br />

um deadlock. Os deadlocks acontecem quando processos diferentes tentam adquirir<br />

recursos gradualmente usando exclusão mútua e chegam a um impasse. A Figura 10.1.3<br />

mostra a situação em que dois processos, A e B, tentam adquirir recursos X e Y (note que<br />

os recursos são liberados por cada um dos processos na ordem inversa em que foram<br />

adquiridos):<br />

Função processo_A<br />

adquire_recurso X;<br />

adquire_recurso Y;<br />

· · · ;<br />

libera_recurso Y;<br />

libera_recurso X;<br />

Função processo_B<br />

adquire_recurso Y;<br />

adquire_recurso X;<br />

· · · ;<br />

libera_recurso X;<br />

libera_recurso Y;<br />

Este programa, quando executado, entrará em deadlock, e nenhuma mensagem será<br />

mostrada ao usuário.<br />

Versão Preliminar<br />

Uma maneira de implementar acesso exclusivo de threads a recursos é usando mutexes.<br />

Um mutex é um objeto que pode ser “travado” por uma thread; quando duas threads<br />

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