- - - - CENAPAD-MGCO

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


Servidor de Impressora: Solução com Erro

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



Osvaldo Carvalho - Postscript - Comentários?