-- File: [Indigo]<Sakura>Dragon>DragonArbiterImpl.sak
-- 28-Feb-82 20:03:55

DIRECTORY
  DragonArbiter: TYPE, 
  SakuraRT: TYPE;

DragonArbiterImpl: MONITOR
  IMPORTS SakuraRT
  EXPORTS DragonArbiter
  
  = BEGIN
  Arbiter: PUBLIC PROC [ClockA, ClockB, Proc1Rq: SakuraRT.Handle, 
                        Proc1Gr: SakuraRT.Handle] = {
    {ENABLE {ABORTED => GO TO Aborted};
     DO SakuraRT.GetNew[ClockA, TRUE]; NULL; 
        IF NARROW[SakuraRT.Get[Proc1Rq], REF BOOLEAN]↑ THEN 
           SakuraRT.Put[Proc1Gr, NEW[BOOLEAN ← TRUE]]; 
        SakuraRT.GetNew[ClockB, TRUE]; NULL; 
        IF NARROW[SakuraRT.Get[Proc1Rq], REF BOOLEAN]↑ THEN 
           SakuraRT.Put[Proc1Gr, NEW[BOOLEAN ← TRUE]]
        ENDLOOP; 
     SakuraRT.ProcessEnd[]}
    EXITS
      Aborted => SakuraRT.AbortAll[]};
  
  END.