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.

Sistema produtor/consumidor

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)
   }
}
  • Deve ser escrito um arquivo test/pingpong-prodcons.c, onde serão definidas as tarefas produtor, consumidor e principal (main).
  • As principais variáveis necessárias para implementar o projeto são:
    • item : valor inteiro entre 0 e 99
    • buffer : 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.

Os seguintes arquivos são relevantes para este projeto:

  • test/pingpong-prodcons.c: sua implementação do sistema produtor/consumidor.
  • ppos-v2/sistema_produtor-consumidor.txt
  • Última modificação: 2026/05/06 22:32
  • por maziero