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.
O código básico de um sistema produtor/consumidor é o seguinte:
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
{
while (true)
{
down (s_item)
down (s_buffer)
retira item do buffer
up (s_buffer)
up (s_vaga)
print item
task_sleep (1000)
}
}
pingpong-prodcons.c, onde serão definidas as tarefas produtor, consumidor e principal (main).item : valor inteiro entre 0 e 99buffer : 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 inicializadosp1 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.