my @running_threads = (); while ($finished eq "false") { @running_threads = threads->list; if (scalar(@running_threads) < $worker_num) { print "launching thread with count:$count\n"; $somedata = getData(); if ($somedata ne "") { threads->new(\&worker, $somedata); } else { $finished = "true"; } } }