git @ Cat's Eye Technologies Bhuna / master eg / prodcons-orig.bhu
master

Tree @master (Download .tar.gz)

prodcons-orig.bhu @masterraw · history · blame

Producer = ^ N, NP, Main {
  if N = 0
    Send Main, <Self(), NP>
  else
    Msg = Recv(1000)
    Send Msg[1], <data, NP>
    Producer N - 1, NP + 1, Main
}

Consumer = ^ N, NC, P, Main {
  if N = 0
    Send Main, <Self(), NC>
  else
    Send P, <Self(), next>
    Msg = Recv(1000)
    Consumer N - 1, NC + 1, P, Main
}

N = 100000
P = Spawn(^{ Producer N, 0, Self() })
C = Spawn(^{ Consumer N, 0, P, Self() })

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