Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: thread ids stringifying wrong in v5.12.4?

by BrowserUk (Patriarch)
on Dec 14, 2012 at 15:07 UTC ( [id://1008854]=note: print w/replies, xml ) Need Help??


in reply to thread ids stringifying wrong in v5.12.4?

async does not return a "thread id", it returns a blessed thread handle. To get a thread id from a thread handle, use $threadHandle->tid;

Thus, there is no perpose in storing your thread handles in a hash -- where they will get stringified -- because you can (and do) obtain those handles from your joinable() sub.

Your while loop for joining the threads is horrible -- it obtains the same list over and over. It can be replaced by a simple:

printf "%d => %d\n", $_->tid, $_->join for @threads;

Provided you store your thread handles in the array @threads so:

push @threads, async { sleep 3*$i+5; $i };

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

RIP Neil Armstrong

Replies are listed 'Best First'.
Re^2: thread ids stringifying wrong in v5.12.4?
by samwyse (Scribe) on Dec 17, 2012 at 18:36 UTC
    Strictly speaking, I wasn't storing the thread handles in a hash, I was wanting to use them as keys. This is because I wanted to associate information for each thread (i.e. the parameters used when started). Using the tid() method solved that problem.

    I'm unsure that your code for joining the threads is useful to me, as it seems that it would wait for the first thread to finish before checking any others. Since some of the threads may hang, this would not solve my stated problem. I do agree that using a sleep loop isn't optimal, and I should look for a better way to wait for threads to exit.

      some of the threads may hang

      How do you handle not getting the return value from those threads that hang?

      How will you clean those threads up when your program ends?


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

      RIP Neil Armstrong

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1008854]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (2)
As of 2024-04-20 03:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found