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 usando sincronização através de um Monitor.


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() {...}
   }

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

(b) As 120 threads Leitor devem ser controladas por um ExecutorService (caso 1, em Formas de Escalonamento Java) usando um pool de tamanho fixo 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.

(c) Na terceira parte do trabalho, a primeira thread Leitor que conseguir ler o valor escrito deve configurar a variável do Buffer para zero. Para que as outras threads Leitor 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.


Apresentação

A atividade pode ser desenvolvida em duplas. O programa deve ser apresentado ao professor no laboratório. 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.