Producer = ^ N, NP, Main { if N = 0 { // Print "Producer done w/", NP, EoL Send Main, [Self(), NP] } else { Msg = Recv(1000) // Print "Producing ", NP, EoL Send Msg[1], [data, NP] Producer N - 1, NP + 1, Main } } Consumer = ^ N, NC, P, Main { if N = 0 { // Print "Consumer done w/", NC, EoL Send Main, [Self(), NC] } else { // Print "Consumer wanting next", EoL Send P, [Self(), next] // Print "Consuming...", EoL Msg = Recv(1000) // Print "Consumer got ", Msg, EoL Consumer N - 1, NC + 1, P, Main } } N = 100000 Main = Self() P = Spawn(^{ Producer N, 0, Main }) C = Spawn(^{ Consumer N, 0, P, Main }) NP = 0 NC = 0 while NP = 0 | NC = 0 { Msg = Recv(1000) if Msg[1] = P { NP = Msg[2] } if Msg[1] = C { NC = Msg[2] } } Print NP, " ", NC, EoL