program five; unit A: process(node: integer, p: pq); unit finish: procedure; end finish; begin return; call p.update(false); accept finish; end A; unit B: process(node:integer, p:pq, q:pq); var aux: boolean; unit finish: procedure; end finish; begin return; call q.update(true); aux := q.readval; call p.update(aux); accept finish; end B; unit pq: process(node:integer); var value : Boolean; unit readval: function: Boolean; begin result := value; end readval; unit update: procedure(arg: boolean); begin value := arg end update; begin value := false; return; do accept readval, update; od; end pq; var aa: A, bb: B, p,q: pq; begin p := new pq(0); q := new pq(0); aa := new A(0,p); bb := new B (0, p, q); resume(p); resume(q); resume(aa); resume(bb); call aa.finish; call bb.finish; if p.readval then writeln ("p is TRUE") else writeln("p is FALSE") fi; call endrun end