#!/usr/bin/perl # the classical producer/consumer example, using semaphores # one process produces items, send s a signal. # another process waits for that signal and # consumed the item. use Coro; use Coro::Channel; use Coro::Signal; my $work = new Coro::Channel 3; my $finished = new Coro::Signal; async { for my $i (0..9) { print "produced $i\n"; $work->put($i); } print "work done\n"; $finished->send; }; async { while () { my $i = $work->get; print "consumed $i\n"; } }; $finished->wait; print "producer finished\n"; yield while $work->size; print "job finished\n";