Produtor/Consumidor POSIX

Problema

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)
   }
}

Observações

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

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
...                          ...

A entregar

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