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

produtor<br />

consumidor<br />

Figura 10.2: O problema produtor/consumidor.<br />

( set ! fila-<strong>com</strong>um ( enqueue ! fila-<strong>com</strong>um num ))<br />

( mutex-unlock ! filas )<br />

( produz-<strong>com</strong>um ))))<br />

( let (( threads ( list ( make-thread print-loop )<br />

( make-thread produz-vip )<br />

( for-each thread-start ! threads )<br />

( make-thread produz-<strong>com</strong>um ))))<br />

( thread-join ! ( car threads ))) ;; will never finish anyway<br />

10.2 problemas e exemplos típicos<br />

(Esta seção está in<strong>com</strong>pleta)<br />

Aqui são descritos alguns problemas típicos de programação concorrente. Há muitos<br />

outros problemas no livro de Allen Downey [38], que mostra para cada um uma solução<br />

usando semáforos.<br />

10.2.1 Produtor-consumidor<br />

Um processo produz dados sequencialmente, mas sem periodicidade definida, e os deixa<br />

em um buffer de tamanho limitado. Outro processo usa estes dados, e os descarta após o<br />

uso. Quando o buffer está cheio, somente o processo consumidor pode atuar; quando o<br />

buffer está vazio, somente o produtor pode prosseguir. A Figura 10.2 ilustra esta situação.<br />

É necessário que ambos usem um mecanismo de sincronização para acessarem o buffer<br />

sem que os dados sejam incorretamente modificados e também para que cada processo<br />

saiba se pode ou não prosseguir.<br />

Versão Preliminar<br />

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

235

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

Saved successfully!

Ooh no, something went wrong!