------------------------------------------------------------------------------ Mohamed G. Gouda CS356 Spring 2008 Midterm 3 Solution ------------------------------------------------------------------------------ 1. (10 points) process p inp N : set {g | p[g] is a neighbor of p[i]}, up : array [N] of boolean var ts,t : integer, {init. 0} h : N txt : integer d : 0..1 par g : N begin rcv data(t,txt,d) from p[g] --> if t <= ts -> skip [] t > ts -> ts := t; if (i mod 2 = d) -> {accept txt} skip [] (i mod 2 != d) -> {ignore txt} skip fi h := NEXT(N, g); do h != g -> if up[h] ^ h != 0 -> send data(t, txt, d) to p[h] [] ~up[h] v h = 0 -> skip fi; h := NEXT(N,h) od fi end ------------------------------------------------------------------------------ 2. (10 points) rtb[0, 0..1] in p[0] = 1, 2 rtb[0, 0..1] in p[1] = 0, 2 or 0, 0 rtb[0, 0..1] in p[2] = 0, 0 or 0, 1 rtb[0, 0..1] in p[3] = 1, 2 rtb[0, 0..1] in p[4] = 2, 3 ------------------------------------------------------------------------------