-
-
-
CENAPAD-MGCO
A seguir: 3a Questão Acima: Gabarito Anterior: 1a Questão
O processo carro executa o seguinte programa:
... bridge.enter(myDirection); // atravessa a ponte bridge.leave(myDirection); ...
O objeto bridge é uma instância da classe Bridge:
class Bridge {
int ncars; // no. carros sobre a ponte
int currentDirection = EMPTY; // EAST, WEST ou EMPTY
Key mutex;
Bed bed;
void enter(int direction) {
lock(mutex);
while (currentDirection == oposite(direction)) {
wait(bed, mutex);
}
ncars++;
currentDirection = direction;
unlock(mutex);
}
void leave(int direction) {
lock(mutex);
ncars--;
if (ncars == 0) {
currentDirection = EMPTY;
}
wakeup(bed, mutex);
unlock(mutex);
}
}
Esta solução pode provocar a inanição de um carro, vítima de um tráfego muito intenso na direção contrária. Não foi feito nenhum esforço para controlar o número de veículos sobre a ponte.