Advertisement
KDOXG

Produtor / Consumidor em Pthreads

Sep 12th, 2019
558
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. Produtor / Consumidor em Pthreads
  2. Individual.
  3.  
  4. Prazo: até 24/set
  5. Implemente um programa do tipo Produtor / Consumidor em Pthreads. Os produtores e os consumidores devem ser implementados com threads e compartilham um buffer (de tamanho limitado). Os produtores inserem dados no buffer e os consumidores retiram. A política de manipulação do buffer é FIFO.
  6.  
  7. Cada produtor, ao ser lançado, recebe dois parâmetros: um valor V representando um valor inteiro e um endereço de memória B, que represente o buffer. Os produtores executam um laço com V iterações, gerando valores aleatórios (rand) e inserindo-os em B. Como o tamanho do buffer é limitado, caso não tenha espaço disponível para armazenamento, o produtor permanece bloqueado. Ao final do laço, o produtor retorna.
  8.  
  9. Cada consumidor, ao ser lançado, recebe um único parâmetro: um endereço B de memória representando o buffer. Os consumidores executam um laço infinito, retirando do buffer um valor e verificando se o valor é um número primo. Caso o valor seja primo, imprimir na tela o thread_id do thread consumidor e o número primo encontrado no seguinte formato [id:v]. Importante: caso o valor retirado do buffer seja -1 (um negativo), o consumidor deve abandonar o thread. Caso o buffer esteja vazio, o consumidor deve ficar bloqueado aguardando que um valor seja inserido.
  10.  
  11. O programa principal deve lançar os produtores e os consumidores e, então, aguardar o término os produtores para então inserir no buffer tantos valores -1 quanto for o número de consumidores instanciados para poder aguardar o término dos consumidores.
  12.  
  13. Entradas:
  14.  
  15. - Valor v de iterações por Produtor
  16.  
  17. - Número p e c para o número de Produtores e Consumidores
  18.  
  19. - Tamanho t para o tamanho máximo do buffer
  20.  
  21. Dicas:
  22.  
  23. Utilize variáveis de condição, sendo a condição representada pelo número de elementos no buffer
  24. Utilize uma lista encadeada como buffer, pode até ser a list do C++, mas a implementação deve ser toda com Pthreads e não com threads C++11
  25. Deve ser entregue um arquivo ZIP (outros formatos não serão aceitos) contendo:
  26.  
  27. Os programas fontes, contendo comentários.
  28. Um PDF detalhando a implementação (sem reproduzir o código, apenas trechos se necessário ao detalhamento).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement