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

10.1 problemas inerentes à programação concorrente<br />

Esta Seção descreve alguns problemas relacionados à programação concorrente. Estes<br />

problemas serão retomados nos próximos Capítulos.<br />

10.1.1 Corretude<br />

Programas sequenciais se <strong>com</strong>portam de maneira determinística: iniciando em um mesmo<br />

estado, o programa sempre se <strong>com</strong>porta da mesma maneira e termina no mesmo estado<br />

final. Pode-se então reproduzir o <strong>com</strong>portamento de um programa sequencial e usar<br />

baterias de testes para detectar problemas nele.<br />

Já um programa concorrente pode se <strong>com</strong>portar de maneira diferente cada vez que é<br />

executado, mesmo iniciando em um mesmo estado.<br />

Não sendo possível usar testes para verificar programas concorrentes, é possível tentar<br />

provar formalmente a corretude dos algoritmos subjacentes a estes programas.<br />

Há dois tipos de propriedade interessantes relacionadas à corretude de programas<br />

concorrentes:<br />

• Safety (segurança); uma propriedade deste tipo determina que o programa nunca<br />

entre em determinados estados. Por exemplo, um sistema que contabiliza créditos<br />

de telefonia implementa operações para adicionar crédito (feita quando o usuário<br />

<strong>com</strong>pra mais créditos) e de descontar crédito (que acontece sempre que o usuário<br />

usa o telefone). Uma propriedade de segurança determinaria que a soma dos<br />

créditos <strong>com</strong>prados, usados e disponíveis deve ser zero (ou, equivalentemente,<br />

que as operações adicionar e descontar possam executar concorrentemente, sempre<br />

resultando no mesmo número de créditos que resultariam da execução de ambas<br />

uma após a outra, sem intercalação);<br />

• Liveness: uma propriedade de liveness determina que certos estados do programa<br />

serão em algum momento alcançados. Por exemplo, um servidor web pode criar<br />

uma nova thread para cada conexão. Uma propriedade de liveness poderia ser a<br />

exigência de que cada thread consiga enviar ao cliente uma página HTML em algum<br />

Versão Preliminar<br />

momento (e não ter que esperar indefinidamente).<br />

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

227

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

Saved successfully!

Ooh no, something went wrong!