Estou fazendo um trabalho para a faculdade com o uso de locks. O problema é basicamente o seguinte: tenho 10 threads que representam turistas; estes turistas devem fazer 3 tipos de atividades: andar de esqui, andar de banana boat, e andar de lancha. Para fazer qualquer uma destas atividades, eles devem usar 1 colete cada, mas existemm apenas 6 coletes. Escolhida a atividade, uma lancha deve ser alocada (existem apenas 2 lanchas para as 3 atividades). As atividades passeio de lancha e passeio de banana boat só podem ser feitos de 4 em 4 turistas.
Resumindo, os recursos são:
6 coletes;
2 lanchas;
1 esqui;
1 banana boat.
e os 10 turistas
Minha dificuldade está em deixar threads em espera até que 4 threads escolham a mesma atividade (passeio de banana boat ou de lancha).
Na verdade, eu já fiz o programa, mas ele está apresentando alguns problemas.
O passeio com o esqui funciona ok, mas o passeio de lancha e o de banana boat, que é necessário ter 4 threads para ser feito, dá problema.
Uso uma Condition para fazer a alocação de lugar, e funciona, mas a quarta thread que entra pega um lugar, não fica na fila, aloca a lancha para o passeio e dá o signalAll para as que estão na fila esperando … o problema é que elas continuam lá … ai o programa tranca