const N = 100000; class Producer !! { routine Run( chan : mt::Channel ){ var index = 0; while( ++index <= N ){ if( index % 100 == 0 ) io.writeln( "sending", index ) chan.send( index ) } chan.cap(0) # set channel buffer size to zero to close the channel; } } class Consumer !! { routine Run( chan : mt::Channel ){ while(1){ var data = chan.receive() if( (int)data.data % 100 == 0 ) io.writeln( "received", data ); if( data.status == $finished ) break } } } var chan = mt::Channel(100) var producer = Producer() var consumer = Consumer() producer.Run( chan ) consumer.Run( chan )