LABORATÓRIO 1:  THREADS E MONITORES

INE5645 | Descrição | Implementação | Apresentação | Dúvidas


Descrição

Nesta atividade de laboratório você deve implementar um sistema Escritor/Leitor.


Implementação

Existem 240 threads, sendo 120 Escritor e 120 Leitores, e um objeto Buffer de tamanho 1 como dois métodos:

   class Buffer {
      synchronized Escrever(int i) {...}

     
   synchronized int Ler() {...}
   }

As threads Escritor devem ser escalonadas usando ScheduledThreadPool, ou seja, todas essas 120 threads devem ser controladas por esse escalonador. Esse escalonador deve liberar uma thread Escritor a cada 0,1 milissegundo (utilize scheduleAtFixedRate) que irá escrever um valor inteiro incremental no Buffer.

As 120 threads Leitor devem ser controladas por um ExecutorService usando FixedThreadPool que deve permitir até 4 threads Leitor em estado de pronto durante a execução do código. As threads Leitor em estado de pronto devem tentar ler o valor escrito no objeto Buffer. Verifique a quantidade de threads Leitor que leram o mesmo valor inteiro.

Na segunda parte do trabalho, a primeira thread Leitor que conseguir ler o valor escrito deve setar a variável do Buffer para zero. Para que as outras thread não leiam zero, você deve utilizar monitor juntamente com wait/notify. Isto é, quando uma thread Leitor verificar que o buffer está vazio, este invoca o método wait(). E quando uma thread Escritor tiver escrito um dado, este invoca o método notify(). Verifique o comportamento do programa em relação ao anterior.

Por fim, altere o programa para que a cada 4 thread Leitor leia o mesmo valor escrito por uma thread Escritor. Dica, implemente um barreira usando o método wait(). Quando 4 threads Leitor tiver invocado esse método uma thread Escritor deve invocar o método notifyAll() para que as 4 threads leiam o mesmo valor.


Apresentação

A atividade deve ser desenvolvida em duplas. O programa deve ser apresentado ao professor no laboratório até o dia 29/03. 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.