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,consumidore 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:
