Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
so:produtor_consumidor [2010/06/18 19:37] mazieroso:produtor_consumidor [2017/08/03 11:12] (atual) – [Problema] maziero
Linha 1: Linha 1:
 +====== 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:
 +
 +<code>
 +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)
 +   }
 +}
 +</code>
 +
 +===== Observações =====
 +
 +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:
 +
 +<code>
 +p1 produziu 337
 +p2 produziu 441
 +                             c1 consumiu 337
 +p3 produziu 649
 +p1 produziu 21
 +                             c2 consumiu 441
 +p2 produziu 178
 +                             c1 consumiu 649
 +...                          ...
 +</code>
 +
 +===== A entregar =====
 +
 +Entregar o código implementado, sem esquecer de identificar o(s) autor(es).