Suponha que existam
passageiros e um carro em uma montanha russa. Os
passageiros, repetidamente, esperam para dar uma volta no carro. O carro
tem capacidade para
passageiros, com
. O carro só pode partir
quando estiver cheio. Após dar uma volta na montanha russa, cada
passageiro passeia pelo parque de diversões e depois retorna à montanha
russa para a próxima volta.
Tanto o carro como os passageiros devem ser representados por threads. As threads passageiro executam o seguinte pseudo-código:
thread passageiro {
while (!fechouParque) {
entraNoCarro();
esperaVoltaAcabar();
saiDoCarro();
passeiaPeloParque(); // tempo variável
}
}
A thread carro executa o seguinte pseudo-código:
process carro {
while (existemPassageirosNoParque) {
esperaEncher();
daUmaVolta();
esperaEsvaziar();
volta++; // serve como parâmetro para fechar o parque
}
}