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

Jerônimo C. Pellegrini<br />

• Aquisição gradual de recursos: um processo pode obter um recurso e manter sua posse<br />

enquanto requisita outros;<br />

• Não-preempção: Um processo não terá um recurso tomado sem tê-lo liberado;<br />

• Espera circular: há n processos P 1 , P 2, · · · , P n tal que cada processo P i (i < n)<br />

espera por algum recurso alocado para o processo P i+1 , e P n espera por um recurso<br />

alocado para P 1 .<br />

Pode-se ainda deixar a cargo do sistema que, antes de alocar um recurso a um<br />

processo, verifique que esta alocação não resultará em deadlock.<br />

Para resolver deadlocks, é necessário detectá-los e eliminá-los. A eliminação de<br />

deadlocks normalmente se dá escolhendo um processo que já adquiriu alguns recursos e<br />

forçando-o a liberá-los.<br />

10.1.4 Starvation<br />

Se um processo fica indefinidamente esperando para executar, diz-se que ele “morre de<br />

fome” (starvation). Para que isto não occorra,<br />

• Não deve haver a possibilidade de deadlock;<br />

• O escalonamento dos processos deve ser justo: embora cada processo possa ter uma<br />

prioridade diferente, o escalonador deve garantir que todos os processos executarão<br />

periodicamente.<br />

O exemplo a seguir mostra um sistema de emissão de tickets (poderiam ser passagens<br />

aéreas, entradas para cinema, teatro ou show – não importa). Há duas categorias: os<br />

Versão Preliminar<br />

VIPs tem preferência sobre os <strong>com</strong>uns, e sempre que houver um pedido de ticket VIP<br />

na fila, ele será atendido antes do pedido de ticket <strong>com</strong>um. Se a emissão de tickets for<br />

suficientemente demorada e os pedidos suficientemente frequentes, a fila de VIPs nunca<br />

estará vazia, e a fila de <strong>com</strong>uns nunca andará. O programa simula esta situação <strong>com</strong><br />

tres threads: uma que emite tickets, removendo pedidos de duas filas, e duas outras que<br />

produzem os pedidos e os incluem em duas filas (vip e <strong>com</strong>um). O programa emite tickets<br />

<strong>com</strong>uns <strong>com</strong> numeração negativa e tickets VIP <strong>com</strong> numeração positiva. O leitor pode<br />

verificar que a fila de <strong>com</strong>uns não anda, e nenhum número negativo é mostrado.<br />

( load " queue . scm ")<br />

( define filas ( make-mutex ))<br />

[ 27 de outubro de 2010 at 15:47 ]<br />

233

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

Saved successfully!

Ooh no, something went wrong!