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

ativas. Quando este contador for zero (ou seja, quando a última thread sair), o acesso é<br />

liberado para a thread escritora.<br />

Assim, o escritor só precisa esperar até que a sala esteja vazia. Quando estiver,<br />

ele tranca a porta (wait sala) e entra em sua região crítica. Ao sair, ele abre a porta<br />

(signal sala).<br />

Função escritor<br />

repita sempre<br />

e ← gera_evento<br />

wait sala<br />

add buffer, (e)<br />

signal sala<br />

O leitor só precisa chamar entra e sai ao entrar e sair da região crítica, passando<br />

para estas funções o semáforo que indica que há alguém ali dentro:<br />

Função leitor<br />

repita sempre<br />

entra sala<br />

le buffer<br />

sai sala<br />

A implementação de entra é simples: a função obtém acesso exclusivo, incrementa o<br />

contador (ela é “mais uma” thread na sala) e verifica se o contador agora é um. Se for, ela<br />

é a primeira thread – e neste caso deve “acender a luz”, indicando à escritora que agora a<br />

sala está ocupada:<br />

Função entra(sema)<br />

wait sala.mutex<br />

cont ← cont +1<br />

se cont = 1 então<br />

wait sema<br />

signal sala.mutex<br />

Versão Preliminar<br />

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