use strict; use warnings; use MCE::Hobo; use MCE::Shared; my $workQueue = MCE::Shared->queue(); my $doneQueue = MCE::Shared->queue(); my $numWorkers = 4; MCE::Hobo->create(sub{DoWork($workQueue, $doneQueue)}) for 1 .. $numWorkers; for (1 .. 10000) { my $work = int(rand(10000)); $workQueue->enqueue($work); } $workQueue->end(); my $count_done = 0; while () { my $result = $doneQueue->dequeue(); last if (!$result && ++$count_done == $numWorkers); print "$result\n" if $result; } $_->join() for MCE::Hobo->list; exit; sub DoWork { my ($work, $done) = @_; while (my $item = $work->dequeue()) { $done->enqueue($item) if $item >= 10 && $item <= 20; } $done->enqueue(0); }