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

Figura 11.3: Um monitor <strong>com</strong> variáveis de condição não bloqueantes.<br />

11.5.3 Exemplo: produtor-consumidor<br />

Um monitor deverá encapsular o buffer e um contador que indicará a quantidade de itens<br />

no buffer. Além disso, usará também duas variáveis de condição, cheio e vazio.<br />

A função monitor/adiciona verifica se o buffer já está cheio (MAX é o tamanho<br />

do buffer); se estiver, espera pela variável de condição cheio. Em seguida, adiciona o<br />

elemento ao buffer e incrementa o contador. Se o valor do contador, após o incremento,<br />

tiver o valor um, então o buffer estava vazio antes da inserção – e neste caso, chama<br />

signal vazio para indicar à thread consumidora que o buffer não está mais vazio.<br />

Função monitor/adiciona(e)<br />

se contador = MAX então<br />

wait cheio<br />

adiciona buffer e<br />

contador ← contador +1<br />

se contador = 1 então<br />

signal vazio<br />

Versão Preliminar<br />

A função monitor/remove espera até que haja itens no buffer, remove um item e<br />

decrementa o contador. Se o contador, após o decremento, tiver o valor MAX − 1, então o<br />

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