sub getIP { while (1) { print "Thread ",$self->tid," waiting\n"; { lock $pool; $pool++; print "Pool incrementada : $pool\n"; cond_wait $pool; #all threads wait here for signal $pool--; print "Pool decrementadas : $pool \n"; } # Here i get the ip address my $t_ip = $ip_address; sleep 1; # now let's tell main that we already have the ip address print "Thread ",$self->tid," retrieved data, signaling main\n"; { lock ($ip_address); cond_signal ($ip_address); } #now i do the snmp session in the thread plus a snmpget my $sess = new SNMP::Session (DestHost => $t_ip, Community => ..., Version => '2c', UseSprintValue => '1') or die "couldn't open a session"; #The oid my $itens = new SNMP::VarList(['sometextthing', $oid]) or die "couldn't create a varlist"; $info = $sess->get($itens) or die "couldn't get info"; ... } }