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

Usando a primeira observação, podemos dar a cada garfo um semáforo binário e usar<br />

também um semáforo podem_<strong>com</strong>er para indicar quem pode tentar <strong>com</strong>er.<br />

Função pega_garfos <strong>com</strong> semáforos: solução <strong>com</strong> quatro <strong>com</strong>endo de cada vez.<br />

repita sempre<br />

wait podem_<strong>com</strong>er<br />

wait garfo[esquerda i]<br />

wait garfo[direita i]<br />

Função deixa_garfos <strong>com</strong> semáforos: solução <strong>com</strong> quatro <strong>com</strong>endo de cada vez.<br />

repita sempre<br />

signal podem_<strong>com</strong>er<br />

signal garfo[esquerda i]<br />

signal garfo[direita i]<br />

A segunda solução impõe que filósofos diferentes usem ordens diferentes para<br />

adquirir os garfos (o uso de assimetria na ordem de aquisição dos recursos é uma técnica<br />

<strong>com</strong>um no desenvolvimento de algoritmos concorrentes <strong>com</strong> recursos <strong>com</strong>partilhados):<br />

Função pega_garfos <strong>com</strong> semáforos: solução <strong>com</strong> ordem na aquisoção de garfos.<br />

repita sempre<br />

se i é par então<br />

wait garfo[esquerda i]<br />

wait garfo[direita i]<br />

senão<br />

wait garfo[direita i]<br />

wait garfo[esquerda i]<br />

11.3.5 Semáforos POSIX<br />

Em sistemas Unix que implementem o padrão POSIX, há oferece uma API para criar<br />

semáforos.<br />

A função sem_open abre um semáforo <strong>com</strong> nome (o nome do semáforo é tratado<br />

Versão Preliminar<br />

<strong>com</strong>o um nome de arquivo), retornando um ponteiro para uma estrutura do tipo<br />

sem_t. A assinatura da função é sem_open (const char *nome, int flag, int modo,<br />

unsigned valor). Os argumentos nome, flag e modo funcionam exatamente <strong>com</strong>o os<br />

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