- - - - CENAPAD-MGCO

contents index A seguir: Exemplo Acima: Carvalho e Roucairol (1983) Anterior: Carvalho e Roucairol (1983)


Carvalho e Roucairol (1983) - 2

PROCEDURE Release();
VAR j: CARDINAL;
BEGIN
  lock(mutex);
    Eating := FALSE; Thinking := TRUE;
    FOR j := 1 TO n DO
      IF Deferred[j] THEN
        A[j] := FALSE; Deferred[j] := FALSE;
        send(release(i),j);
  unlock(mutex);
END Release;


PROCEDURE ReceiveRequest(Tk, k: CARDINAL);
VAR OurPriority: BOOLEAN;
BEGIN
  lock(mutex);
    HSN := MAX(HSN, Tk);
    OurPriority := (Tk > OSN) OR
                   ((Tk = OSN) AND (k > i));
    IF Eating OR (Hungry AND OurPriority) THEN 
      Deferred[j] := TRUE;
    ELSE /* Eating = FALSE, Hungry => NOT OurPriority */
      send(release(i),j);
      IF Hungry AND A[j] THEN send(request(OSN,i),j);
      A[j] := FALSE;
    END;
  unlock(mutex);
END ReceiveRequest);

PROCEDURE ReceiveRelease(k: CARDINAL);
BEGIN
  lock(mutex);
    A[k] := TRUE; WakeUp(B, mutex);
  unlock(mutex);
END ReceiveRelease;



Osvaldo Carvalho - Postscript - Comentários?