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

O objeto umObjeto pode conter referências ao objeto A, e o método fazAlgo pode<br />

chamar métodos que modificam a variável saldo. Isto torna difícil raciocinar localmente a<br />

respeito dos métodos de cada objeto.<br />

O conceito de herança torna a situação um pouco mais difícil: mesmo que saibamos<br />

que umObjeto é uma instância de umaClasse, e que então inspecionemos o método<br />

umaClasse.fazAlgo() para nos certificarmos que ele não modifica saldo, não sabemos se<br />

umObjeto é instância de uma subclasse de umaClasse <strong>com</strong> uma implementação diferente<br />

de fazAlgo().<br />

Estes problemas ficam mais delicados quando há várias threads em execução em um<br />

mesmo momento. Em um programa sequencial há uma única thread e os objetos ficam,<br />

na maior parte do tempo, “inanimados”, esperando pela ativação de seus métodos. Com<br />

muitas threads, um objeto pode ser usado e modificado por qualquer uma das threads.<br />

Isto leva à necessidade do uso de monitores, trazendo mais <strong>com</strong>plexidade ao trabalho do<br />

programador.<br />

Em uma linguagem baseada no CSP, o valor de saldo após a execução das duas<br />

linhas mostradas a seguir é zero, porque o envio de uma mensagem por um canal não<br />

pode modificar variáveis locais do processo.<br />

saldo ← 0;<br />

umCanal ! algo;<br />

13.1.2 Conceitos fundamentais do CSP<br />

Linguagens baseadas no CSP não apresentam os problemas descritos na seção anterior,<br />

uma vez que não há <strong>com</strong>partilhamento de variáveis entre threads. Há bibliotecas e<br />

linguagens que suportam troca síncrona de mensagens, <strong>com</strong> diferentes graus de aderência<br />

ao CSP. Esta seção passa apenas uma idéia básica do que é o CSP para que possamos<br />

discutir as primitivas de programação usadas naquelas linguages, sem entrar em detalhes<br />

do formalismo subjacente. O leitor interessado em conhecer melhor o CSP encontrará<br />

uma exposição excelente no livro de Roscoe [48].<br />

Versão Preliminar<br />

Os principais conceitos usados na construção de programas concorrentes em linguagens<br />

baseadas no CSP são elencados a seguir.<br />

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