Uso de semáforos
Este projeto consiste em usar seu sistema, com as funções de semáforos implementadas no projeto anterior, para construir um sistema produtor/consumidor com buffer limitado.
O código básico de um sistema produtor/consumidor é o seguinte:
Produtor
produtor { while (true) { task_sleep (1000) item = random (0..99) down (s_vaga) down (s_buffer) insere item no buffer up (s_buffer) up (s_item) } }
Consumidor
consumidor { while (true) { down (s_item) down (s_buffer) retira item do buffer up (s_buffer) up (s_vaga) print item task_sleep (1000) } }
Observações
- Deve ser escrito um arquivo
pingpong-prodcons.c
, onde serão definidas as tarefasprodutor
,consumidor
e principal (main
). - As principais variáveis necessárias para implementar o projeto são:
item
: valor inteiro entre 0 e 99buffer
: fila de inteiros com capacidade para até 5 elementos, inicialmente vazia, acessada com política FIFO. Pode ser implementado usando um vetor de inteiros ou a biblioteca de filas já desenvolvida.s_buffer
,s_item
,s_vaga
: semáforos, devidamente inicializados
- O sistema implementado deve ter 3 produtores e 2 consumidores. Ele deve produzir na tela uma saída com formato similar a este:
p1 produziu 37 p2 produziu 11 c1 consumiu 37 p3 produziu 64 p1 produziu 21 c2 consumiu 11 p2 produziu 4 c1 consumiu 64 ... ...
Observe que os números são consumidos na seqüência em que foram produzidos, o que caracteriza o comportamento FIFO do buffer.
Outras informações
- Duração estimada: 3 horas.
- Dependências: