Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
so:uso_de_semaforos [2015/03/27 20:14] – maziero | so:uso_de_semaforos [2023/03/29 19:12] (atual) – maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Uso de semáforos ====== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Este projeto consiste em usar seu sistema, com as funções de semáforos implementadas no projeto anterior, para construir um sistema produtor/ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | O código básico de um sistema produtor/ | ||
+ | |||
+ | === 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 '' | ||
+ | * As principais variáveis necessárias para implementar o projeto são: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * 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 | ||
+ | |||
+ | ===== 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]] | ||