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:uso_de_semaforos [2020/08/04 15:46] mazieroso:uso_de_semaforos [2023/03/29 16:12] (atual) maziero
Linha 1: Linha 1:
 +====== Uso de semáforos ======
 +
 +{{ :so:ppos_11_prodcons.mkv |Video deste projeto}}
 +
 +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.
 +
 +{{ :so:coord-prodcons.png |Sistema produtor/consumidor}}
 +
 +O código básico de um sistema produtor/consumidor é o seguinte:
 +
 +=== Produtor ===
 +
 +<code>
 +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)
 +   }
 +}
 +</code>
 +
 +=== Consumidor ===
 +
 +<code>
 +consumidor
 +{
 +   while (true)
 +   {
 +      down (s_item)
 +
 +      down (s_buffer)
 +      retira item do buffer
 +      up (s_buffer)
 +
 +      up (s_vaga)
 +
 +      print item
 +      task_sleep (1000)
 +   }
 +}
 +</code>
 +
 +===== Observações =====
 +
 +  * Deve ser escrito um arquivo ''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:
 +
 +<code>
 +p1 produziu 37
 +p2 produziu 11
 +                             c1 consumiu 37
 +p3 produziu 64
 +p1 produziu 21
 +                             c2 consumiu 11
 +p2 produziu 4
 +                             c1 consumiu 64
 +...                          ...
 +</code>
 +
 +Observe que os números são consumidos na seqüência em que foram produzidos, o que caracteriza o comportamento  FIFO do //buffer//.
 +
 +===== Outras informações =====
 +
 +  * Duração estimada: 3 horas.
 +  * Dependências:
 +    * [[Gestão de Tarefas]]
 +    * [[Dispatcher]]
 +    * [[Preempção por Tempo]]
 +    * [[Tarefas suspensas]]
 +    * [[Tarefas dormindo]]
 +    * [[Semáforos]]