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