in reply to Threads question
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
at crucial code points.return if $die;
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Threads question
by BrowserUk (Patriarch) on Jun 29, 2007 at 14:19 UTC | |
by zentara (Cardinal) on Jun 29, 2007 at 16:28 UTC | |
by BrowserUk (Patriarch) on Jun 29, 2007 at 17:40 UTC | |
by zentara (Cardinal) on Jun 30, 2007 at 12:39 UTC | |
by BrowserUk (Patriarch) on Jun 30, 2007 at 13:28 UTC | |
|