- - - - CENAPAD-MGCO

contents index A seguir: SJF: Shortest Job First Acima: Imposição de Políticas de Anterior: Servidor de Impressora: Solução


Servidor de Impressora: Solução ``correta''

Substituindo if por while , corrigimos o problema de desrespeito à propriedade de invariância da exclusão mútua no uso da impressora:

boolean busy = false; key mutex; bed b;
Queue q = new Queue();
ProcessId owner;

void requestPrinter(ProcessId client) {
   lock(mutex); 
      q.enter(client);
      while (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);
}

Mas continuamos com o escalonamento imposto pelo núcleo!



Osvaldo Carvalho - Postscript - Comentários?