INE5645 | Descrição | Implementação | Apresentação |
Nesta
atividade você deve controlar o acesso concorrente de alunos a livros em uma
estante.
Descrição
Uma estante possui 10 livros distintos sobre programação paralela e distribuída. Um professor pede para cada aluno de uma turma de 60 alunos fazer uma monografia usando exatamente 5 desses livros. O prazo de entrega é 800 unidades de tempo. Ao final da aula os alunos correm para esta estante.
Cada um dos livros de 1 a 5 leva 4 unidades de tempo para ser lido, enquanto que a leitura dos livros de 6 a 10 leva 7 unidades de tempo. Um detalhe, os livros 6 a 10, por serem maiores, podem ser lidos, de forma compartilhada, por até 2 estudantes.
Um aluno, ao chegar à estante, tenta pegar até 5 livros para levar à mesa de leitura, onde ele consegue ler um livro por vez. Assim que termina de ler um livro, o aluno o devolve pra estante, tenta pegar mais livros caso ainda não tenha atingido o limite de 5 livros, e então volta para a mesa de leitura para completar o trabalho.
Por exemplo, um aluno que consegue pegar 5 livros na primeira tentativa deve ler os livros e devolver cada um à medida que terminar de ler. Um outro aluno que pegou apenas 3 livros deve ler o primeiro, devolvê-lo, tentar pegar mais livros em apenas uma tentativa (pode voltar de mãos vazias), voltar à mesa para ler outro livro, ir à estante para devolver, e assim por diante, até ter lido os 5 livros necessários para fazer a monografia.
A seqüência de acesso aos livros deve ser aleatória em cada tentativa, sem repetição de um mesmo livro. Os alunos que não conseguiram pegar nenhum livro na primeira tentativa devem fazer novas tentativas em uma nova seqüência aleatória.
Implementação
Você deve implementar o problema descrito acima em Java usando Threads para representar os alunos e Locks para controlar o acesso aos livros da estante.
A saída do programa deve mostrar a dinâmica do acesso aos livros. Ao final da execução, devem ser fornecidas respostas para as seguintes perguntas:
· Após 800 unidades de tempo, quantos alunos conseguiram entregar o trabalho ao professor no prazo?
· Quais foram os livros mais lidos?
· Quantas unidades de tempo são necessárias para que todos os alunos consigam concluir o trabalho?
· Com o prazo de 800 unidades de tempo, quantos livros a mais são necessários para que todos os alunos possam concluir o trabalho? Considere o tempo médio de 6 unidades de tempo para leitura dos novos livros.
Observação: A estante não é região critica, apenas os livros.
Apresentação
A atividade deve
ser desenvolvida em duplas. O programa deve ser apresentado ao professor no
laboratório até o dia 14/04. Os dois componentes
do grupo devem estar presentes. Será verificado o funcionamento do programa e em
seguida os alunos devem responder a questões sobre a forma como foram utilizados
threads e monitores no programa.
Trabalhos entregues com atraso terão desconto
automático de 2 pontos por semana de atraso. Após a segunda semana (14 dias após
o fim do prazo original), o trabalho não mais será aceito, ou seja, terá nota
zero.
Podem ser atribuídas notas diferentes aos alunos de um grupo, dependendo das
respostas às perguntas sobre o código do programa efetuadas pelo professor. Caso
um dos alunos não esteja presente ou demonstre não conhecer o código do
programa, será atribuída nota zero à atividade. Em caso
de cópia do código de outro grupo, ambos terão nota igual a zero.