z1 := 0 z2 := 0 fun loop1() { | k | k := 1 while (< k 100) { printf "loop1 => %d\n" k k := (+ k 2) yield } z1 := k sem-signal s1 } fun loop2() { | k | k := 0 while (< k 100) { printf "loop2 => %d\n" k k := (+ k 2) yield } z2 := k sem-signal s2 } s1 := (sem-new) s2 := (sem-new) p1 := (fork loop1) p2 := (fork loop2) ##suspend p1 ##suspend p2 ##resume p1 ##resume p2 sem-wait s1 sem-wait s2 if (== z1 101) { printf "OK: z1 is %d\n" z1 } \ else { printf "ERROR: z1 is not 101 - %d\n" z1 } if (== z2 100) { printf "OK: z2 is %d\n" z2 } \ else { printf "ERROR: z1 is not 100 - %d\n" z2 }