Descrição
Neste exercício você deve implementar em Java um problema
de controle de acesso a um restaurante utilizando semáforos.
Em um pequeno restaurante existem 12 mesas,
cada uma podendo comportar até 4 pessoas. O restaurante funciona com sistema
de buffet livre. As pessoas entram no restaurante e vão direto para a fila do
buffet, que possui saladas, prato principal e sobremesa. O buffet comporta até
10 pessoas ao mesmo tempo se servindo.
As pessoas vão ao buffet se servir de saladas e
do prato principal e, em seguida, procuram uma mesa para comer. Ao terminar de
comer, a pessoa volta ao buffet para pegar a sobremesa, volta à mesa (que está
reservada pra ele ainda) pra comer a sobremesa e pagar a conta para sair do
restaurante.
O restaurante comporta até 70 clientes
simultaneamente (48 nas mesas, 10 no buffet e 12 em uma fila de espera interna
ao restaurante). Os demais clientes devem esperar em uma fila, fora do
restaurante.
Cerca de
500 clientes almoçam por dia nesse restaurante.
Implementação
Implemente um programa que simule o funcionamento
do restaurante usando semáforos, controlando a movimentação dos clientes: até
10 pessoas no buffet; até 4 pessoas comendo em cada uma das 12 mesas; e até 12
pessoas
na fila de espera.
O acesso ao restaurante também
é um semáforo que comporta no máximo 70 clientes (threads).
Uma pessoa leva de 25 a 30 unidades de tempo
para comer a salada e o prato principal e 5 a 6 unidades de tempo para comer a
sobremesa. O tempo que uma pessoa gasta para se servir é de 4 a 6 unidades de
tempo.
Crie 500 threads que representem os
clientes. A cada movimentação de um cliente, imprima uma mensagem na tela.
Após implementar o programa, responda as
seguintes perguntas:
- Em quantas unidades de tempo todos os 500 clientes
conseguem almoçar?
- Se cada cliente esperar no máximo 40 unidades de
tempo para entrar no restaurante, quantos desistirão depois de 3000 unidades de tempo de simulação ?
Apresentação
A atividade deve ser
desenvolvida em duplas. O programa deve ser apresentado ao professor no
laboratório até o dia 18/10. 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 semáforos no programa.
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
f r a n k @ i n f . u f s
c . b r
l a u . l u n g @
i n f . u f s c . b r
Mantida por Frank Siqueira. Atualizada em
16/10/2007.
|