------------------------------------------------------------------------------- Mohamed G. Gouda CS 356 Summer 2006 Midterm 1 Solution ------------------------------------------------------------------------------- 1. process p const v var ready : array [0..v-1] of boolean; {init. true} i : 0..v-1 par j : 0..v-1 begin ready[j] -> send rqst(j) to q; ready[j] := false [] rcv rply(i) from q -> ready[i] := true [] rcv rqst(i) from q -> send rply(i) to q; end Another solution: process p const v var ready : array [0..v-1] of boolean, {init. true} i, j : 0..v-1 begin ready[j] -> send rqst(j) to q; ready[j] := false; j := j +v 1 [] rcv rply(i) from q -> ready[i] := true [] rcv rqst(i) from q -> send rply(i) to q; []~ready[j] -> j := j +v 1 end ------------------------------------------------------------------------------- 2. process p[i : 0..m-1] const m,n var ready : boolean; {init. true} begin ready -> send rqst to d; ready := false [] rcv rply from d -> ready := true end process d const m,n var x : 0..m-1, y : 0..n-1 {init. 0} par i : 0..m-1; j : 0..n-1 begin rcv rqst from p[i] -> send rqst(i) to q[y]; y := y +n 1 [] rcv rply(x) from q[j] -> send rply to p[x] end process q[i : 0..n-1] const m,n var x: 0..m-1 begin rcv rqst(x) from d -> send rply(x) to d end -------------------------------------------------------------------------------