12.07.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. Pellegrini11.1.1 DiscussãoO tempo usado por threads para adquirir e liberar locks é chamado de overheadde lock.• A disputa por um recurso pode bloquear um número excessivo de threads;• O overhead de lock existe mesmo quando a probabilidade de conflito entre threadsé muito baixa, e pode levar a um problema de eficiência;• O uso de locks tem <strong>com</strong>o efeito colateral a possibilidade de deadlocks.Uma thread está em espera ocupada quando, ao invés de ser interrompida paraceder seu tempo a outra enquanto espera, permanece executando um laço àespera de que uma condição se modifique 1 .11.2 semáforosSemáforos, inventados por Edsger Dijkstra [34], podem ser vistos <strong>com</strong>o uma generalizaçãoda idéia de mutex locks: enquanto um lock permite que uma thread tenha exclusividadede acesso a um recurso, um semáforo determina um número máximo de threads quepoderão utilizar um recurso de cada vez 2 .Um semáforo tem <strong>com</strong>o <strong>com</strong>ponentes um número inteiro e dois procedimentos,chamados de P e V 3 (ou signal e wait), usados para controlar o acesso a um recurso.O número no semáforo representa a quantidade de threads que ainda pode conseguiracesso ao recurso. O procedimento wait de um semáforo é chamado por threads quequeiram acesso ao recurso, e o procedimento signal é usado para liberar o acesso aorecurso.1 A espera ocupada <strong>com</strong> spinlocks é útil na implementação de sistemas operacionais, em situações em quecada thread permanece muito pouco tempo na seção crítica, e desta forma o tempo que outras threadspermanecerão em espera ocupada é pequeno. Em outras situações a espera ocupada pode causar problemas,Versão Preliminare deve-se optar por outro mecanismo.2 Ou ainda, mutex locks são um caso particular de semáforo onde o número de threads que pode adquirir orecurso é um.3 Os nomes P e V foram dados por Dijkstra, usando a primeira letra de palavras em Holandês que descrevemas operações: V para verhogen (incremente) e P para a palavra inventada prolaag, que teria o significado de“tente decrementar” (probeer te verlagen).170[ 13 de setembro de 2010 at 21:23 ]

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

Saved successfully!

Ooh no, something went wrong!