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 } }