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