Trabalho III

Mecanismo de Lock do Java

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 5livros obtidos. O prazo de entrega é 300 unidades de tempo (por exemplo, 300 x 100ms = 30s). 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

Na primeira parte do trabalho (vale 2,0 pontos no trabalho 3), 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 300 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 300 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.

Na segunda parte do trabalho (vale 0,5 ponto no trabalho 3 e 1 ponto na prova 2), reimplemente esse trabalho usando o wait() e notify() do monitor  Java. 

Dica: crie uma classe MeuLock em que implementa alguns métodos da interface Lock. Implemente apenas aqueles que são necessários para esse trabalho. A implementação dessa classe pode ser feita usando synchronized com wait() e notify().

Uma vez implementada essa classe, substitua o Lock do Java pela classe MeuLock.

Apresentação

Como o trabalho anterior, esse trabalho vale 2,5 pontos.

A atividade pode ser desenvolvida individualmente ou em dupla. Em caso de cópia do código de outro aluno, ambos terão nota igual a zero.

O programa deverá ser enviado ao Moodle e apresentado ao professor no laboratório até o dia 05/11. Será verificado o funcionamento do programa e em seguida os alunos devem responder a questões sobre a forma como foram utilizados threads e locks no programa. Trabalho não entregue no prazo terá 0,5 ponto descontado por semana de atrasoApós duas semanas de atraso o trabalho não será mais aceito.

Dúvidas

Atendimento aos Alunos

  • Horário: Quartas-feiras das 16:00 às 17:40.
  • Local: Prédio do INE - Sala 305.

E-Mail

l a u . l u n g @  i n f . u f s c . b r

Mantida por Lau Cheuk Lung. Atualizada em 14/05/2015.

© Lau Cheuk Lung 2014