8 our $VERSION = '1.81_02';
9 my $XS_VERSION = $VERSION;
10 $VERSION = eval $VERSION;
12 # Verify this Perl supports threads
14 if (! $Config::Config{useithreads}) {
15 die("This Perl not built to support threads\n");
18 # Complain if 'threads' is loaded after 'threads::shared'
19 if ($threads::shared::threads_shared) {
21 Warning, threads::shared has already been loaded. To
22 enable shared variables, 'use threads' must be called
23 before threads::shared or any module that uses it.
27 # Declare that we have been loaded
28 $threads::threads = 1;
32 XSLoader::load('threads', $XS_VERSION);
39 my $class = shift; # Not used
41 # Exported subroutines
42 my @EXPORT = qw(async);
45 while (my $sym = shift) {
46 if ($sym =~ /^(?:stack|exit)/i) {
47 if (defined(my $arg = shift)) {
48 if ($sym =~ /^stack/i) {
49 threads->set_stack_size($arg);
51 $threads::thread_exit_only = $arg =~ /^thread/i;
55 Carp::croak("threads: Missing argument for option: $sym");
58 } elsif ($sym =~ /^str/i) {
59 import overload ('""' => \&tid);
61 } elsif ($sym =~ /^(?::all|yield)$/) {
62 push(@EXPORT, qw(yield));
66 Carp::croak("threads: Unknown import option: $sym");
70 # Export subroutine names
71 my $caller = caller();
72 foreach my $sym (@EXPORT) {
74 *{$caller.'::'.$sym} = \&{$sym};
77 # Set stack size via environment variable
78 if (exists($ENV{'PERL5_ITHREADS_STACK_SIZE'})) {
79 threads->set_stack_size($ENV{'PERL5_ITHREADS_STACK_SIZE'});
86 # Exit from a thread (only)
89 my ($class, $status) = @_;
90 if (! defined($status)) {
97 Carp::croak('Usage: threads->exit(status)');
100 $class->set_thread_exit_only(1);
104 # 'Constant' args for threads->list()
106 sub threads::running { 1 }
107 sub threads::joinable { 0 }
109 # 'new' is an alias for 'create'
112 # 'async' is a function alias for the 'threads->create()' method
115 unshift(@_, 'threads');
116 # Use "goto" trick to avoid pad problems from 5.8.1 (fixed in 5.8.2)
120 # Thread object equality checking
123 '!=' => sub { ! equal(@_) },
133 threads - Perl interpreter-based threads
137 This document describes threads version 1.81
141 use threads ('yield',
142 'stack_size' => 64*4096,
143 'exit' => 'threads_only',
148 print('Thread started: ', join(' ', @args), "\n");
150 my $thr = threads->create('start_thread', 'argument');
153 threads->create(sub { print("I am a thread\n"); })->join();
155 my $thr2 = async { foreach (@files) { ... } };
157 if (my $err = $thr2->error()) {
158 warn("Thread error: $err\n");
161 # Invoke thread in list context (implicit) so it can return a list
162 my ($thr) = threads->create(sub { return (qw/a b c/); });
163 # or specify list context explicitly
164 my $thr = threads->create({'context' => 'list'},
165 sub { return (qw/a b c/); });
166 my @results = $thr->join();
170 # Get a thread's object
171 $thr = threads->self();
172 $thr = threads->object($tid);
175 $tid = threads->tid();
179 # Give other threads a chance to run
183 # Lists of non-detached threads
184 my @threads = threads->list();
185 my $thread_count = threads->list();
187 my @running = threads->list(threads::running);
188 my @joinable = threads->list(threads::joinable);
190 # Test thread objects
191 if ($thr1 == $thr2) {
195 # Manage thread stack size
196 $stack_size = threads->get_stack_size();
197 $old_size = threads->set_stack_size(32*4096);
199 # Create a thread with a specific context and stack size
200 my $thr = threads->create({ 'context' => 'list',
201 'stack_size' => 32*4096,
202 'exit' => 'thread_only' },
205 # Get thread's context
206 my $wantarray = $thr->wantarray();
208 # Check thread's state
209 if ($thr->is_running()) {
212 if ($thr->is_joinable()) {
216 # Send a signal to a thread
217 $thr->kill('SIGUSR1');
224 Since Perl 5.8, thread programming has been available using a model called
225 I<interpreter threads> which provides a new Perl interpreter for each
226 thread, and, by default, results in no data or state information being shared
229 (Prior to Perl 5.8, I<5005threads> was available through the C<Thread.pm> API.
230 This threading model has been deprecated, and was removed as of Perl 5.10.0.)
232 As just mentioned, all variables are, by default, thread local. To use shared
233 variables, you need to also load L<threads::shared>:
238 When loading L<threads::shared>, you must C<use threads> before you
239 C<use threads::shared>. (C<threads> will emit a warning if you do it the
242 It is strongly recommended that you enable threads via C<use threads> as early
243 as possible in your script.
245 If needed, scripts can be written so as to run on both threaded and
248 my $can_use_threads = eval 'use threads; 1';
249 if ($can_use_threads) {
250 # Do processing using threads
253 # Do it without using threads
259 =item $thr = threads->create(FUNCTION, ARGS)
261 This will create a new thread that will begin execution with the specified
262 entry point function, and give it the I<ARGS> list as parameters. It will
263 return the corresponding threads object, or C<undef> if thread creation failed.
265 I<FUNCTION> may either be the name of a function, an anonymous subroutine, or
268 my $thr = threads->create('func_name', ...);
270 my $thr = threads->create(sub { ... }, ...);
272 my $thr = threads->create(\&func, ...);
274 The C<-E<gt>new()> method is an alias for C<-E<gt>create()>.
278 This will wait for the corresponding thread to complete its execution. When
279 the thread finishes, C<-E<gt>join()> will return the return value(s) of the
280 entry point function.
282 The context (void, scalar or list) for the return value(s) for C<-E<gt>join()>
283 is determined at the time of thread creation.
285 # Create thread in list context (implicit)
286 my ($thr1) = threads->create(sub {
287 my @results = qw(a b c);
291 my $thr1 = threads->create({'context' => 'list'},
293 my @results = qw(a b c);
296 # Retrieve list results from thread
297 my @res1 = $thr1->join();
299 # Create thread in scalar context (implicit)
300 my $thr2 = threads->create(sub {
304 # Retrieve scalar result from thread
305 my $res2 = $thr2->join();
307 # Create a thread in void context (explicit)
308 my $thr3 = threads->create({'void' => 1},
309 sub { print("Hello, world\n"); });
310 # Join the thread in void context (i.e., no return value)
313 See L</"THREAD CONTEXT"> for more details.
315 If the program exits without all threads having either been joined or
316 detached, then a warning will be issued.
318 Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already joined thread will
319 cause an error to be thrown.
323 Makes the thread unjoinable, and causes any eventual return value to be
324 discarded. When the program exits, any detached threads that are still
325 running are silently terminated.
327 If the program exits without all threads having either been joined or
328 detached, then a warning will be issued.
330 Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already detached thread
331 will cause an error to be thrown.
333 =item threads->detach()
335 Class method that allows a thread to detach itself.
337 =item threads->self()
339 Class method that allows a thread to obtain its own I<threads> object.
343 Returns the ID of the thread. Thread IDs are unique integers with the main
344 thread in a program being 0, and incrementing by 1 for every thread created.
348 Class method that allows a thread to obtain its own ID.
352 If you add the C<stringify> import option to your C<use threads> declaration,
353 then using a threads object in a string or a string context (e.g., as a hash
354 key) will cause its ID to be used as the value:
356 use threads qw(stringify);
358 my $thr = threads->create(...);
359 print("Thread $thr started...\n"); # Prints out: Thread 1 started...
361 =item threads->object($tid)
363 This will return the I<threads> object for the I<active> thread associated
364 with the specified thread ID. If C<$tid> is the value for the current thread,
365 then this call works the same as C<-E<gt>self()>. Otherwise, returns C<undef>
366 if there is no thread associated with the TID, if the thread is joined or
367 detached, if no TID is specified or if the specified TID is undef.
369 =item threads->yield()
371 This is a suggestion to the OS to let this thread yield CPU time to other
372 threads. What actually happens is highly dependent upon the underlying
373 thread implementation.
375 You may do C<use threads qw(yield)>, and then just use C<yield()> in your
378 =item threads->list()
380 =item threads->list(threads::all)
382 =item threads->list(threads::running)
384 =item threads->list(threads::joinable)
386 With no arguments (or using C<threads::all>) and in a list context, returns a
387 list of all non-joined, non-detached I<threads> objects. In a scalar context,
388 returns a count of the same.
390 With a I<true> argument (using C<threads::running>), returns a list of all
391 non-joined, non-detached I<threads> objects that are still running.
393 With a I<false> argument (using C<threads::joinable>), returns a list of all
394 non-joined, non-detached I<threads> objects that have finished running (i.e.,
395 for which C<-E<gt>join()> will not I<block>).
397 =item $thr1->equal($thr2)
399 Tests if two threads objects are the same thread or not. This is overloaded
400 to the more natural forms:
402 if ($thr1 == $thr2) {
403 print("Threads are the same\n");
406 if ($thr1 != $thr2) {
407 print("Threads differ\n");
410 (Thread comparison is based on thread IDs.)
414 C<async> creates a thread to execute the block immediately following
415 it. This block is treated as an anonymous subroutine, and so must have a
416 semicolon after the closing brace. Like C<threads-E<gt>create()>, C<async>
417 returns a I<threads> object.
421 Threads are executed in an C<eval> context. This method will return C<undef>
422 if the thread terminates I<normally>. Otherwise, it returns the value of
423 C<$@> associated with the thread's execution status in its C<eval> context.
425 =item $thr->_handle()
427 This I<private> method returns the memory location of the internal thread
428 structure associated with a threads object. For Win32, this is a pointer to
429 the C<HANDLE> value returned by C<CreateThread> (i.e., C<HANDLE *>); for other
430 platforms, it is a pointer to the C<pthread_t> structure used in the
431 C<pthread_create> call (i.e., C<pthread_t *>).
433 This method is of no use for general Perl threads programming. Its intent is
434 to provide other (XS-based) thread modules with the capability to access, and
435 possibly manipulate, the underlying thread structure associated with a Perl
438 =item threads->_handle()
440 Class method that allows a thread to obtain its own I<handle>.
444 =head1 EXITING A THREAD
446 The usual method for terminating a thread is to
447 L<return()|perlfunc/"return EXPR"> from the entry point function with the
448 appropriate return value(s).
452 =item threads->exit()
454 If needed, a thread can be exited at any time by calling
455 C<threads-E<gt>exit()>. This will cause the thread to return C<undef> in a
456 scalar context, or the empty list in a list context.
458 When called from the I<main> thread, this behaves the same as C<exit(0)>.
460 =item threads->exit(status)
462 When called from a thread, this behaves like C<threads-E<gt>exit()> (i.e., the
463 exit status code is ignored).
465 When called from the I<main> thread, this behaves the same as C<exit(status)>.
469 Calling C<die()> in a thread indicates an abnormal exit for the thread. Any
470 C<$SIG{__DIE__}> handler in the thread will be called first, and then the
471 thread will exit with a warning message that will contain any arguments passed
472 in the C<die()> call.
476 Calling L<exit()|perlfunc/"exit EXPR"> inside a thread causes the whole
477 application to terminate. Because of this, the use of C<exit()> inside
478 threaded code, or in modules that might be used in threaded applications, is
479 strongly discouraged.
481 If C<exit()> really is needed, then consider using the following:
483 threads->exit() if threads->can('exit'); # Thread friendly
486 =item use threads 'exit' => 'threads_only'
488 This globally overrides the default behavior of calling C<exit()> inside a
489 thread, and effectively causes such calls to behave the same as
490 C<threads-E<gt>exit()>. In other words, with this setting, calling C<exit()>
491 causes only the thread to terminate.
493 Because of its global effect, this setting should not be used inside modules
496 The I<main> thread is unaffected by this setting.
498 =item threads->create({'exit' => 'thread_only'}, ...)
500 This overrides the default behavior of C<exit()> inside the newly created
503 =item $thr->set_thread_exit_only(boolean)
505 This can be used to change the I<exit thread only> behavior for a thread after
506 it has been created. With a I<true> argument, C<exit()> will cause only the
507 thread to exit. With a I<false> argument, C<exit()> will terminate the
510 The I<main> thread is unaffected by this call.
512 =item threads->set_thread_exit_only(boolean)
514 Class method for use inside a thread to change its own behavior for C<exit()>.
516 The I<main> thread is unaffected by this call.
522 The following boolean methods are useful in determining the I<state> of a
527 =item $thr->is_running()
529 Returns true if a thread is still running (i.e., if its entry point function
530 has not yet finished or exited).
532 =item $thr->is_joinable()
534 Returns true if the thread has finished running, is not detached and has not
535 yet been joined. In other words, the thread is ready to be joined, and a call
536 to C<$thr-E<gt>join()> will not I<block>.
538 =item $thr->is_detached()
540 Returns true if the thread has been detached.
542 =item threads->is_detached()
544 Class method that allows a thread to determine whether or not it is detached.
548 =head1 THREAD CONTEXT
550 As with subroutines, the type of value returned from a thread's entry point
551 function may be determined by the thread's I<context>: list, scalar or void.
552 The thread's context is determined at thread creation. This is necessary so
553 that the context is available to the entry point function via
554 L<wantarray()|perlfunc/"wantarray">. The thread may then specify a value of
555 the appropriate type to be returned from C<-E<gt>join()>.
557 =head2 Explicit context
559 Because thread creation and thread joining may occur in different contexts, it
560 may be desirable to state the context explicitly to the thread's entry point
561 function. This may be done by calling C<-E<gt>create()> with a hash reference
562 as the first argument:
564 my $thr = threads->create({'context' => 'list'}, \&foo);
566 my @results = $thr->join();
568 In the above, the threads object is returned to the parent thread in scalar
569 context, and the thread's entry point function C<foo> will be called in list
570 (array) context such that the parent thread can receive a list (array) from
571 the C<-E<gt>join()> call. (C<'array'> is synonymous with C<'list'>.)
573 Similarly, if you need the threads object, but your thread will not be
574 returning a value (i.e., I<void> context), you would do the following:
576 my $thr = threads->create({'context' => 'void'}, \&foo);
580 The context type may also be used as the I<key> in the hash reference followed
583 threads->create({'scalar' => 1}, \&foo);
585 my ($thr) = threads->list();
586 my $result = $thr->join();
588 =head2 Implicit context
590 If not explicitly stated, the thread's context is implied from the context
591 of the C<-E<gt>create()> call:
593 # Create thread in list context
594 my ($thr) = threads->create(...);
596 # Create thread in scalar context
597 my $thr = threads->create(...);
599 # Create thread in void context
600 threads->create(...);
602 =head2 $thr->wantarray()
604 This returns the thread's context in the same manner as
605 L<wantarray()|perlfunc/"wantarray">.
607 =head2 threads->wantarray()
609 Class method to return the current thread's context. This returns the same
610 value as running L<wantarray()|perlfunc/"wantarray"> inside the current
611 thread's entry point function.
613 =head1 THREAD STACK SIZE
615 The default per-thread stack size for different platforms varies
616 significantly, and is almost always far more than is needed for most
617 applications. On Win32, Perl's makefile explicitly sets the default stack to
618 16 MB; on most other platforms, the system default is used, which again may be
619 much larger than is needed.
621 By tuning the stack size to more accurately reflect your application's needs,
622 you may significantly reduce your application's memory usage, and increase the
623 number of simultaneously running threads.
625 Note that on Windows, address space allocation granularity is 64 KB,
626 therefore, setting the stack smaller than that on Win32 Perl will not save any
631 =item threads->get_stack_size();
633 Returns the current default per-thread stack size. The default is zero, which
634 means the system default stack size is currently in use.
636 =item $size = $thr->get_stack_size();
638 Returns the stack size for a particular thread. A return value of zero
639 indicates the system default stack size was used for the thread.
641 =item $old_size = threads->set_stack_size($new_size);
643 Sets a new default per-thread stack size, and returns the previous setting.
645 Some platforms have a minimum thread stack size. Trying to set the stack size
646 below this value will result in a warning, and the minimum stack size will be
649 Some Linux platforms have a maximum stack size. Setting too large of a stack
650 size will cause thread creation to fail.
652 If needed, C<$new_size> will be rounded up to the next multiple of the memory
653 page size (usually 4096 or 8192).
655 Threads created after the stack size is set will then either call
656 C<pthread_attr_setstacksize()> I<(for pthreads platforms)>, or supply the
657 stack size to C<CreateThread()> I<(for Win32 Perl)>.
659 (Obviously, this call does not affect any currently extant threads.)
661 =item use threads ('stack_size' => VALUE);
663 This sets the default per-thread stack size at the start of the application.
665 =item $ENV{'PERL5_ITHREADS_STACK_SIZE'}
667 The default per-thread stack size may be set at the start of the application
668 through the use of the environment variable C<PERL5_ITHREADS_STACK_SIZE>:
670 PERL5_ITHREADS_STACK_SIZE=1048576
671 export PERL5_ITHREADS_STACK_SIZE
672 perl -e'use threads; print(threads->get_stack_size(), "\n")'
674 This value overrides any C<stack_size> parameter given to C<use threads>. Its
675 primary purpose is to permit setting the per-thread stack size for legacy
676 threaded applications.
678 =item threads->create({'stack_size' => VALUE}, FUNCTION, ARGS)
680 To specify a particular stack size for any individual thread, call
681 C<-E<gt>create()> with a hash reference as the first argument:
683 my $thr = threads->create({'stack_size' => 32*4096}, \&foo, @args);
685 =item $thr2 = $thr1->create(FUNCTION, ARGS)
687 This creates a new thread (C<$thr2>) that inherits the stack size from an
688 existing thread (C<$thr1>). This is shorthand for the following:
690 my $stack_size = $thr1->get_stack_size();
691 my $thr2 = threads->create({'stack_size' => $stack_size}, FUNCTION, ARGS);
695 =head1 THREAD SIGNALLING
697 When safe signals is in effect (the default behavior - see L</"Unsafe signals">
698 for more details), then signals may be sent and acted upon by individual
703 =item $thr->kill('SIG...');
705 Sends the specified signal to the thread. Signal names and (positive) signal
706 numbers are the same as those supported by
707 L<kill()|perlfunc/"kill SIGNAL, LIST">. For example, 'SIGTERM', 'TERM' and
708 (depending on the OS) 15 are all valid arguments to C<-E<gt>kill()>.
710 Returns the thread object to allow for method chaining:
712 $thr->kill('SIG...')->join();
716 Signal handlers need to be set up in the threads for the signals they are
717 expected to act upon. Here's an example for I<cancelling> a thread:
723 # Thread 'cancellation' signal handler
724 $SIG{'KILL'} = sub { threads->exit(); };
730 my $thr = threads->create('thr_func');
734 # Signal the thread to terminate, and then detach
735 # it so that it will get cleaned up automatically
736 $thr->kill('KILL')->detach();
738 Here's another simplistic example that illustrates the use of thread
739 signalling in conjunction with a semaphore to provide rudimentary I<suspend>
740 and I<resume> capabilities:
743 use Thread::Semaphore;
749 # Thread 'suspend/resume' signal handler
751 $sema->down(); # Thread suspended
752 $sema->up(); # Thread resumes
758 # Create a semaphore and pass it to a thread
759 my $sema = Thread::Semaphore->new();
760 my $thr = threads->create('thr_func', $sema);
768 # Allow the thread to continue
771 CAVEAT: The thread signalling capability provided by this module does not
772 actually send signals via the OS. It I<emulates> signals at the Perl-level
773 such that signal handlers are called in the appropriate thread. For example,
774 sending C<$thr-E<gt>kill('STOP')> does not actually suspend a thread (or the
775 whole process), but does cause a C<$SIG{'STOP'}> handler to be called in that
776 thread (as illustrated above).
778 As such, signals that would normally not be appropriate to use in the
779 C<kill()> command (e.g., C<kill('KILL', $$)>) are okay to use with the
780 C<-E<gt>kill()> method (again, as illustrated above).
782 Correspondingly, sending a signal to a thread does not disrupt the operation
783 the thread is currently working on: The signal will be acted upon after the
784 current operation has completed. For instance, if the thread is I<stuck> on
785 an I/O call, sending it a signal will not cause the I/O call to be interrupted
786 such that the signal is acted up immediately.
788 Sending a signal to a terminated thread is ignored.
794 =item Perl exited with active threads:
796 If the program exits without all threads having either been joined or
797 detached, then this warning will be issued.
799 NOTE: If the I<main> thread exits, then this warning cannot be suppressed
800 using C<no warnings 'threads';> as suggested below.
802 =item Thread creation failed: pthread_create returned #
804 See the appropriate I<man> page for C<pthread_create> to determine the actual
805 cause for the failure.
807 =item Thread # terminated abnormally: ...
809 A thread terminated in some manner other than just returning from its entry
810 point function, or by using C<threads-E<gt>exit()>. For example, the thread
811 may have terminated because of an error, or by using C<die>.
813 =item Using minimum thread stack size of #
815 Some platforms have a minimum thread stack size. Trying to set the stack size
816 below this value will result in the above warning, and the stack size will be
819 =item Thread creation failed: pthread_attr_setstacksize(I<SIZE>) returned 22
821 The specified I<SIZE> exceeds the system's maximum stack size. Use a smaller
822 value for the stack size.
826 If needed, thread warnings can be suppressed by using:
828 no warnings 'threads';
830 in the appropriate scope.
836 =item This Perl not built to support threads
838 The particular copy of Perl that you're trying to use was not built using the
839 C<useithreads> configuration option.
841 Having threads support requires all of Perl and all of the XS modules in the
842 Perl installation to be rebuilt; it is not just a question of adding the
843 L<threads> module (i.e., threaded and non-threaded Perls are binary
846 =item Cannot change stack size of an existing thread
848 The stack size of currently extant threads cannot be changed, therefore, the
849 following results in the above error:
851 $thr->set_stack_size($size);
853 =item Cannot signal threads without safe signals
855 Safe signals must be in effect to use the C<-E<gt>kill()> signalling method.
856 See L</"Unsafe signals"> for more details.
858 =item Unrecognized signal name: ...
860 The particular copy of Perl that you're trying to use does not support the
861 specified signal being used in a C<-E<gt>kill()> call.
865 =head1 BUGS AND LIMITATIONS
867 Before you consider posting a bug report, please consult, and possibly post a
868 message to the discussion forum to see if what you've encountered is a known
873 =item Thread-safe modules
875 See L<perlmod/"Making your module threadsafe"> when creating modules that may
876 be used in threaded applications, especially if those modules use non-Perl
879 =item Using non-thread-safe modules
881 Unfortunately, you may encounter Perl modules that are not I<thread-safe>.
882 For example, they may crash the Perl interpreter during execution, or may dump
883 core on termination. Depending on the module and the requirements of your
884 application, it may be possible to work around such difficulties.
886 If the module will only be used inside a thread, you can try loading the
887 module from inside the thread entry point function using C<require> (and
888 C<import> if needed):
892 require Unsafe::Module
893 # Unsafe::Module->import(...);
898 If the module is needed inside the I<main> thread, try modifying your
899 application so that the module is loaded (again using C<require> and
900 C<-E<gt>import()>) after any threads are started, and in such a way that no
901 other threads are started afterwards.
903 If the above does not work, or is not adequate for your application, then file
904 a bug report on L<http://rt.cpan.org/Public/> against the problematic module.
906 =item Memory consumption
908 On most systems, frequent and continual creation and destruction of threads
909 can lead to ever-increasing growth in the memory footprint of the Perl
910 interpreter. While it is simple to just launch threads and then
911 C<-E<gt>join()> or C<-E<gt>detach()> them, for long-lived applications, it is
912 better to maintain a pool of threads, and to reuse them for the work needed,
913 using L<queues|Thread::Queue> to notify threads of pending work. The CPAN
914 distribution of this module contains a simple example
915 (F<examples/pool_reuse.pl>) illustrating the creation, use and monitoring of a
916 pool of I<reusable> threads.
918 =item Current working directory
920 On all platforms except MSWin32, the setting for the current working directory
921 is shared among all threads such that changing it in one thread (e.g., using
922 C<chdir()>) will affect all the threads in the application.
924 On MSWin32, each thread maintains its own the current working directory
927 =item Environment variables
929 Currently, on all platforms except MSWin32, all I<system> calls (e.g., using
930 C<system()> or back-ticks) made from threads use the environment variable
931 settings from the I<main> thread. In other words, changes made to C<%ENV> in
932 a thread will not be visible in I<system> calls made by that thread.
934 To work around this, set environment variables as part of the I<system> call.
938 system("FOO=$msg; echo \$FOO"); # Outputs 'hello' to STDOUT
940 On MSWin32, each thread maintains its own set of environment variables.
942 =item Parent-child threads
944 On some platforms, it might not be possible to destroy I<parent> threads while
945 there are still existing I<child> threads.
947 =item Creating threads inside special blocks
949 Creating threads inside C<BEGIN>, C<CHECK> or C<INIT> blocks should not be
950 relied upon. Depending on the Perl version and the application code, results
951 may range from success, to (apparently harmless) warnings of leaked scalar, or
952 all the way up to crashing of the Perl interpreter.
956 Since Perl 5.8.0, signals have been made safer in Perl by postponing their
957 handling until the interpreter is in a I<safe> state. See
958 L<perl58delta/"Safe Signals"> and L<perlipc/"Deferred Signals (Safe Signals)">
961 Safe signals is the default behavior, and the old, immediate, unsafe
962 signalling behavior is only in effect in the following situations:
966 =item * Perl has been built with C<PERL_OLD_SIGNALS> (see C<perl -V>).
968 =item * The environment variable C<PERL_SIGNALS> is set to C<unsafe> (see L<perlrun/"PERL_SIGNALS">).
970 =item * The module L<Perl::Unsafe::Signals> is used.
974 If unsafe signals is in effect, then signal handling is not thread-safe, and
975 the C<-E<gt>kill()> signalling method cannot be used.
977 =item Returning closures from threads
979 Returning closures from threads should not be relied upon. Depending of the
980 Perl version and the application code, results may range from success, to
981 (apparently harmless) warnings of leaked scalar, or all the way up to crashing
982 of the Perl interpreter.
984 =item Returning objects from threads
986 Returning objects from threads does not work. Depending on the classes
987 involved, you may be able to work around this by returning a serialized
988 version of the object (e.g., using L<Data::Dumper> or L<Storable>), and then
989 reconstituting it in the joining thread. If you're using Perl 5.10.0 or
990 later, and if the class supports L<shared objects|threads::shared/"OBJECTS">,
991 you can pass them via L<shared queues|Thread::Queue>.
993 =item END blocks in threads
995 It is possible to add L<END blocks|perlmod/"BEGIN, UNITCHECK, CHECK, INIT and
996 END"> to threads by using L<require|perlfunc/"require VERSION"> or
997 L<eval|perlfunc/"eval EXPR"> with the appropriate code. These C<END> blocks
998 will then be executed when the thread's interpreter is destroyed (i.e., either
999 during a C<-E<gt>join()> call, or at program termination).
1001 However, calling any L<threads> methods in such an C<END> block will most
1002 likely I<fail> (e.g., the application may hang, or generate an error) due to
1003 mutexes that are needed to control functionality within the L<threads> module.
1005 For this reason, the use of C<END> blocks in threads is B<strongly>
1008 =item Open directory handles
1010 In perl 5.14 and higher, on systems other than Windows that do
1011 not support the C<fchdir> C function, directory handles (see
1012 L<opendir|perlfunc/"opendir DIRHANDLE,EXPR">) will not be copied to new
1013 threads. You can use the C<d_fchdir> variable in L<Config.pm|Config> to
1014 determine whether your system supports it.
1016 In prior perl versions, spawning threads with open directory handles would
1017 crash the interpreter.
1018 L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154>
1020 =item Perl Bugs and the CPAN Version of L<threads>
1022 Support for threads extends beyond the code in this module (i.e.,
1023 F<threads.pm> and F<threads.xs>), and into the Perl interpreter itself. Older
1024 versions of Perl contain bugs that may manifest themselves despite using the
1025 latest version of L<threads> from CPAN. There is no workaround for this other
1026 than upgrading to the latest version of Perl.
1028 Even with the latest version of Perl, it is known that certain constructs
1029 with threads may result in warning messages concerning leaked scalars or
1030 unreferenced scalars. However, such warnings are harmless, and may safely be
1033 You can search for L<threads> related bug reports at
1034 L<http://rt.cpan.org/Public/>. If needed submit any new bugs, problems,
1035 patches, etc. to: L<http://rt.cpan.org/Public/Dist/Display.html?Name=threads>
1045 L<threads> Discussion Forum on CPAN:
1046 L<http://www.cpanforum.com/dist/threads>
1048 Annotated POD for L<threads>:
1049 L<http://annocpan.org/~JDHEDDEN/threads-1.81/threads.pm>
1052 L<http://code.google.com/p/threads-shared/>
1054 L<threads::shared>, L<perlthrtut>
1056 L<http://www.perl.com/pub/a/2002/06/11/threads.html> and
1057 L<http://www.perl.com/pub/a/2002/09/04/threads.html>
1059 Perl threads mailing list:
1060 L<http://lists.cpan.org/showlist.cgi?name=iThreads>
1062 Stack size discussion:
1063 L<http://www.perlmonks.org/?node_id=532956>
1067 Artur Bergman E<lt>sky AT crucially DOT netE<gt>
1069 CPAN version produced by Jerry D. Hedden <jdhedden AT cpan DOT org>
1073 threads is released under the same license as Perl.
1075 =head1 ACKNOWLEDGEMENTS
1077 Richard Soderberg E<lt>perl AT crystalflame DOT netE<gt> -
1078 Helping me out tons, trying to find reasons for races and other weird bugs!
1080 Simon Cozens E<lt>simon AT brecon DOT co DOT ukE<gt> -
1081 Being there to answer zillions of annoying questions
1083 Rocco Caputo E<lt>troc AT netrus DOT netE<gt>
1085 Vipul Ved Prakash E<lt>mail AT vipul DOT netE<gt> -
1086 Helping with debugging
1088 Dean Arnold E<lt>darnold AT presicient DOT comE<gt> -