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

por exemplo o de Peterson e o de Lamport – mas é mais <strong>com</strong>um que sejam implementados<br />

mais diretamente <strong>com</strong> suporte de hardware.<br />

O tempo usado por threads para adquirir e liberar locks é chamado de overhead<br />

de lock.<br />

• A disputa por um recurso pode bloquear um número excessivo de threads;<br />

• O overhead de lock existe mesmo quando a probabilidade de conflito entre threads<br />

é muito baixa, e pode levar a um problema de eficiência;<br />

• O uso de locks tem <strong>com</strong>o efeito colateral a possibilidade de deadlocks.<br />

Uma thread está em espera ocupada quando, ao invés de ser interrompida para<br />

ceder seu tempo a outra enquanto espera, permanece executando um laço à<br />

espera de que uma condição se modifique 1 .<br />

11.2 variáveis de condição<br />

(esta seção está in<strong>com</strong>pleta)<br />

Há situações em que além de garantir exclusão mútua entre threads, precisamos<br />

evitar que threads permaneçam em espera ocupada. Nestas situações usaremos variáveis<br />

de condição.<br />

Usaremos novamente <strong>com</strong>o exemplo o problema produtor/consumidor. Um servidor<br />

que processa requisições em um buffer poderia usar o algoritmo a seguir para consumir<br />

requisições.<br />

repita sempre<br />

se há requisições no buffer então<br />

r ← desenfilera buffer<br />

trata r<br />

Evidentemente, o mecanismo de exclusão mútua para acesso ao buffer está dentro de<br />

desenfilera.<br />

Versão Preliminar<br />

1 A espera ocupada <strong>com</strong> spinlocks é útil na implementação de sistemas operacionais, em situações em que<br />

cada thread permanece muito pouco tempo na seção crítica, e desta forma o tempo que outras threads<br />

permanecerão em espera ocupada é pequeno. Em outras situações a espera ocupada pode causar problemas,<br />

e deve-se optar por outro mecanismo.<br />

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