One thing that hasn't been mentioned clearly, is how to cleanly end a thread prematurely. All of the discussion above assumes that the thread will finish it's processing then be joined..... but what if you want to join the thread BEFORE it has completed it's code block?

The basic rule to remember, is that in order for a thread to be joined, it must reach the end of it's code block, OR do a return. You usually use a shared variable, such as $die, to signal the thread to return. Then you can have the main thread set $die=1, then in the thread code have

return if $die;
at crucial code points.

This brings up the next big issue you will face, and that is thread code being repeatedly called, can cause a memory gain, because of the imperfect garbage collection of Perl. So..... if your program needs to constantly spawn and join threads, you may need to setup a scheme to reuse threads, and put them in a sleep loop when you don't need them, and feed them a wakeup call and fresh data when you need them.

There are many examples of this in the nodes here at perlmonks, just search for "threads" and look at all the code examples.( Or search groups.google.com for "perl threads")

A final point, changes in shared variable's values are not automatically seen between threads. Each thread needs to run a timer or loop to constantly check them.


I'm not really a human, but I play one on earth. Cogito ergo sum a bum

In reply to Re: Threads question by zentara
in thread Threads question by xiaoyafeng

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.