Produtor/Consumidor POSIX

Este projeto consiste em usar semáforos POSIX para construir um sistema produtor/consumidor com buffer limitado. O código básico de um sistema produtor/consumidor é o seguinte:

produtor ()
{
   while (true)
   {
      pause = random (0..3)
      sleep (pause)
      down (s_vaga)
      down (s_buffer)
      item = random (0..999)
      insere item no buffer
      up (s_buffer)
      up (s_item)
      print item
   }
}

consumidor ()
{
   while (true)
   {
      down (s_item)
      down (s_buffer)
      retira item do buffer
      up (s_buffer)
      up (s_vaga)
      print item
      pause = random (0..3)
      sleep (pause)
   }
}

As principais variáveis necessárias para implementar o projeto são:

  • item : valor inteiro entre 0 e 999
  • buffer : fila de inteiros, inicialmente vazia, acessada com política FIFO. Deve ser usada a implementação de fila circular construída anteriormente. A fila pode conter até 5 elementos.
  • 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 337
p2 produziu 441
                             c1 consumiu 337
p3 produziu 649
p1 produziu 21
                             c2 consumiu 441
p2 produziu 178
                             c1 consumiu 649
...                          ...

Entregar o código implementado, sem esquecer de identificar o(s) autor(es).