-- 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.