Nesta atividade você deve
controlar o acesso concorrente de alunos a livros em uma estante.

Descrição
Uma
estante possui 8 livros distintos sobre a obra
literária de um autor. Um professor pede para cada equipe de 4 alunos, de uma turma de 60 alunos, fazer uma monografia
usando exatamente 5 desses livros. Todos os alunos de uma equipe devem ler os
5 livros obtidos. O prazo de entrega é 200 unidades
de tempo (por exemplo, 200 x 100ms = 20s). Cada equipe tem um líder o qual é
responsável por ir a estante e tentar pegar um livro. Cada líder pode pegar
um livro por vez.
De
início, os alunos da equipe devem estar em estado de espera (await) aguardando o líder obter um livro. Se o líder
conseguir pegar um livro, ele lê esse livro e, em seguida, disponibiliza-o
para os outros alunos da equipe invocando signallAll. Os outros alunos da equipe, ao
perceberem que o líder terminou de ler livro, devem concorrer para obtê-lo.
Como apenas um vai conseguir, os outros devem chamar await.
O aluno que conseguiu ler devolve o livro (unlock)
e sinaliza os que não leram ainda para que concorram pelo livro. Quando os 4 alunos tiverem terminado de ler esse livro, o líder deve
devolvê-lo e tenta obter os outros, até atingir os cincos necessários para
escrever a monografia.
Cada um
dos livros de 1 a 4 leva 4 unidades de tempo para
ser lido, enquanto que a leitura dos livros de 5 a 8 leva 7 unidades de
tempo.
A sequência
de acesso aos livros deve ser aleatória em
cada tentativa do líder, sem repetição de um mesmo livro. Os alunos líderes
que não conseguiram pegar nenhum livro na primeira tentativa devem fazer
novas tentativas em uma nova sequê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 200 unidades de tempo, quantas equipes
conseguiram entregar o trabalho ao professor no prazo?
· Quais foram os livros mais lidos?
· Quantas unidades de tempo são necessárias
para que todas as equipes consigam concluir o trabalho?
· Com o prazo de 200 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 individualmente ou em duplas. O programa deve
ser apresentado ao professor no laboratório até o dia 25/09. 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.
Dúvidas
l a u . l u n g @ i n f . u f s c . b r
Mantida por Lau Cheuk Lung. Atualizada em 03/09/2013.
|