Uso de semáforos
Este projeto faz parte do PPOS v2.
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
test/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 sequência em que foram produzidos, o que caracteriza o comportamento FIFO do buffer.
Arquivos
Os seguintes arquivos são relevantes para este projeto:
test/pingpong-prodcons.c: sua implementação do sistema produtor/consumidor.
Outras informações
- Duração estimada: 3 horas.
- Dependências:
