wbile( my $workitem = sourceOfWork() ) { sleep 1 while $Q->pending > MAXQ; $Q->enqueue( $workitem ); } #### my $cond :shared; ... wbile( my $workitem = sourceOfWork() ) { cond_wait( $cond ); $Q->enqueue( $workitem ); } ## somewhere else ... ... cond_signal( $cond ) if $Q->pending < MAXQ; ...