Uso de semáforos

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.

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 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 seqüência em que foram produzidos, o que caracteriza o comportamento FIFO do buffer.

  • so/uso_de_semaforos.txt
  • Última modificação: 2023/03/29 16:12
  • por maziero