Hello, Sorry if you didn't understand but i couldn't show you code at that time. Now i can. First of all i have this variables:
use SNMP; use Net::MAC; my $ip_address : shared= ""; my $pool : shared = 0; my $nthreads = 10; # Number of threads in pool
Then i have the code to create a pool of threads like this:
foreach (1..$nthreads) { threads->create(\&getIP); }
Then i have a main thread, the main program if you will, that passes, from a list of ip addresses, an ip to each of the threads on the poool. The code is something like this:
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"; }
Then i have my sub for each thread which is something like this:
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 si +gnal $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 addre +ss 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, Commun +ity => ..., 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"; ... } }
The threads start ok but when they try to do the snmpget it appears something like "thread failed to start at "line of the get". Couldn't get info" blablabla. I printed every variable that there was to print. I tried testing the snmpget in another script with the same oid and it worked. I don't know if this has anything to do with snmpsession not being thread safe because i create a session inside each thread. Sorry if all of this seems confusing but it's my first post in here. I usually find the solution to my problems by browsing this site. All problems except this one. Also i had to arrange a similar code to exemplify the problem since i can't post here the real code. Cheers.

In reply to Re^2: Problem using threads and snmp by rnery
in thread Problem using threads and snmp by rnery

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.