foreach $ip (@ip_addresses) { $ip_address = $ip; if ($pool==0) { print "Main thread has no service threads available, yielding\n"; threads->yield until $pool>0; } print "Main thread has $pool service threads available\n"; # signal that a new line is ready { lock $pool; cond_signal $pool; } print "Main thread sent signal, waiting to be signaled\n"; # wait for whichever thread wakes up to signal us { lock $ip_address; cond_wait $ip_address; } print "Main thread received signal, reading next line\n"; }