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.