====== 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 === 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) } } ===== 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: 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//. ===== 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]]