-
-
-
CENAPAD-MGCO
A seguir: Servidor de Impressora: Solução
Acima: Imposição de Políticas de
Anterior: Imposição de Políticas de
Um exemplo para mostrar como o uso do if ao invés do while pode ser muito perigoso:
void print(ProcessId client, File f) {
requestPrinter(client);
/* impress\~{a}o de F */
releasePrinter(client);
}
boolean busy = false; key mutex; bed b;
Queue q = new Queue();
ProcessId owner;
void requestPrinter(ProcessId client) {
lock(mutex);
q.enter(client);
if (busy) { wait(b,mutex); }
busy = true;
q.leave(client);
owner = client;
unlock(mutex);
}
void releasePrinter(ProcessId client) {
lock(mutex);
busy = false;
owner = null;
wakeup(b, mutex);
unlock(mutex);
}