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

fila de<br />

entrada<br />

X<br />

wait(X)<br />

wait(Y)<br />

Y<br />

Figura 11.1: Um monitor.<br />

Além de prover um mecanismo de exclusão mútua através da exigência de que<br />

somente uma thread por vez execute qualquer procedimento, os monitores também<br />

suportam sincronização através de suas variáveis de condição:<br />

• wait: uma thread que detenha o monitor pode chamar wait K, onde K é uma<br />

variável de condição. Fazendo isso ela desocupa temporariamente o monitor e<br />

permite que outras threads o ocupem. A thread que chamou wait ficará em uma<br />

fila associada <strong>com</strong> a condição K; quando K passar a ser verdade, a primeira thread<br />

da fila voltará a ocupar o monitor;<br />

• signal (ou notify): uma thread que detenha o monitor pode chamar signal K para<br />

indicar que a condição K é verdadeira.<br />

A Figura 11.1 ilustra o funcionamento de um monitor: a thread A detém (sozinha) o<br />

monitor; as threads B, C e D já adquiriram o monitor em algum momento, mas executaram<br />

wait e agora aguardam pelas variáveis de condição X e Y.<br />

Quando uma thread chama signal K, ela pode continuar executando ou bloquear. Se<br />

continuar executando, a próxima thread da fila de K será a primeira a executar depois<br />

dela.<br />

11.5.1 Variáveis de condição <strong>com</strong> bloqueio<br />

Versão Preliminar<br />

A descrição original de monitores determinava que quando uma thread chama signal,<br />

ela deve ser bloqueada e aguardar para adquirir novamente o monitor. Ela pode ou não<br />

ter prioridade sobre as outras threads que tentam entrar no monitor.<br />

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