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.