656435947f34a40de7ae797d64503dd7b2bce883
[p5sagit/p5-mst-13.2.git] / ext / threads / threads.pm
1 package threads;
2
3 use 5.008;
4
5 use strict;
6 use warnings;
7
8 our $VERSION = '1.37';
9 my $XS_VERSION = $VERSION;
10 $VERSION = eval $VERSION;
11
12
13 BEGIN {
14     # Verify this Perl supports threads
15     use Config;
16     if (! $Config{useithreads}) {
17         die("This Perl not built to support threads\n");
18     }
19
20     # Declare that we have been loaded
21     $threads::threads = 1;
22
23     # Complain if 'threads' is loaded after 'threads::shared'
24     if ($threads::shared::threads_shared) {
25         warn <<'_MSG_';
26 Warning, threads::shared has already been loaded.  To
27 enable shared variables, 'use threads' must be called
28 before threads::shared or any module that uses it.
29 _MSG_
30    }
31 }
32
33
34 # Load the XS code
35 require XSLoader;
36 XSLoader::load('threads', $XS_VERSION);
37
38
39 ### Export ###
40
41 sub import
42 {
43     my $class = shift;   # Not used
44
45     # Exported subroutines
46     my @EXPORT = qw(async);
47
48     # Handle args
49     while (my $sym = shift) {
50         if ($sym =~ /^stack/i) {
51             threads->set_stack_size(shift);
52
53         } elsif ($sym =~ /^exit/i) {
54             my $flag = shift;
55             $threads::thread_exit_only = $flag =~ /^thread/i;
56
57         } elsif ($sym =~ /all/) {
58             push(@EXPORT, qw(yield));
59
60         } else {
61             push(@EXPORT, $sym);
62         }
63     }
64
65     # Export subroutine names
66     my $caller = caller();
67     foreach my $sym (@EXPORT) {
68         no strict 'refs';
69         *{$caller.'::'.$sym} = \&{$sym};
70     }
71
72     # Set stack size via environment variable
73     if (exists($ENV{'PERL5_ITHREADS_STACK_SIZE'})) {
74         threads->set_stack_size($ENV{'PERL5_ITHREADS_STACK_SIZE'});
75     }
76 }
77
78
79 ### Methods, etc. ###
80
81 # Exit from a thread (only)
82 sub exit
83 {
84     my ($class, $status) = @_;
85     if (! defined($status)) {
86         $status = 0;
87     }
88
89     # Class method only
90     if (ref($class)) {
91         require Carp;
92         Carp::croak("Usage: threads->exit(status)");
93     }
94
95     $class->set_thread_exit_only(1);
96     CORE::exit($status);
97 }
98
99 # 'Constant' args for threads->list()
100 sub threads::all      { }
101 sub threads::running  { 1 }
102 sub threads::joinable { 0 }
103
104 # 'new' is an alias for 'create'
105 *new = \&create;
106
107 # 'async' is a function alias for the 'threads->create()' method
108 sub async (&;@)
109 {
110     unshift(@_, 'threads');
111     # Use "goto" trick to avoid pad problems from 5.8.1 (fixed in 5.8.2)
112     goto &create;
113 }
114
115 # Thread object equality checking
116 use overload (
117     '==' => \&equal,
118     '!=' => sub { ! equal(@_) },
119     'fallback' => 1
120 );
121
122 1;
123
124 __END__
125
126 =head1 NAME
127
128 threads - Perl interpreter-based threads
129
130 =head1 VERSION
131
132 This document describes threads version 1.37
133
134 =head1 SYNOPSIS
135
136     use threads ('yield', 'stack_size' => 64*4096, 'exit' => 'threads_only');
137
138     sub start_thread {
139         my @args = @_;
140         print('Thread started: ', join(' ', @args), "\n");
141     }
142     my $thread = threads->create('start_thread', 'argument');
143     $thread->join();
144
145     threads->create(sub { print("I am a thread\n"); })->join();
146
147     my $thread3 = async { foreach (@files) { ... } };
148     $thread3->join();
149
150     # Invoke thread in list context (implicit) so it can return a list
151     my ($thr) = threads->create(sub { return (qw/a b c/); });
152     # or specify list context explicitly
153     my $thr = threads->create({'context' => 'list'},
154                               sub { return (qw/a b c/); });
155     my @results = $thr->join();
156
157     $thread->detach();
158
159     # Get a thread's object
160     $thread = threads->self();
161     $thread = threads->object($tid);
162
163     # Get a thread's ID
164     $tid = threads->tid();
165     $tid = threads->self->tid();
166     $tid = $thread->tid();
167
168     # Give other threads a chance to run
169     threads->yield();
170     yield();
171
172     # Lists of non-detached threads
173     my @threads = threads->list();
174     my $thread_count = threads->list();
175
176     my @running = threads->list(threads::running);
177     my @joinable = threads->list(threads::joinable);
178
179     # Test thread objects
180     if ($thr1 == $thr2) {
181         ...
182     }
183
184     # Manage thread stack size
185     $stack_size = threads->get_stack_size();
186     $old_size = threads->set_stack_size(32*4096);
187
188     # Create a thread with a specific context and stack size
189     my $thr = threads->create({ 'context'    => 'list',
190                                 'stack_size' => 32*4096,
191                                 'exit'       => 'thread_only' },
192                               \&foo);
193
194     # Get thread's context
195     my $wantarray = $thr->wantarray();
196
197     # Check thread's state
198     if ($thr->is_running()) {
199         sleep(1);
200     }
201     if ($thr->is_joinable()) {
202         $thr->join();
203     }
204
205     # Send a signal to a thread
206     $thr->kill('SIGUSR1');
207
208     # Exit a thread
209     threads->exit();
210
211 =head1 DESCRIPTION
212
213 Perl 5.6 introduced something called interpreter threads.  Interpreter threads
214 are different from I<5005threads> (the thread model of Perl 5.005) by creating
215 a new Perl interpreter per thread, and not sharing any data or state between
216 threads by default.
217
218 Prior to Perl 5.8, this has only been available to people embedding Perl, and
219 for emulating fork() on Windows.
220
221 The I<threads> API is loosely based on the old Thread.pm API. It is very
222 important to note that variables are not shared between threads, all variables
223 are by default thread local.  To use shared variables one must use
224 L<threads::shared>.
225
226 It is also important to note that you must enable threads by doing C<use
227 threads> as early as possible in the script itself, and that it is not
228 possible to enable threading inside an C<eval "">, C<do>, C<require>, or
229 C<use>.  In particular, if you are intending to share variables with
230 L<threads::shared>, you must C<use threads> before you C<use threads::shared>.
231 (C<threads> will emit a warning if you do it the other way around.)
232
233 =over
234
235 =item $thr = threads->create(FUNCTION, ARGS)
236
237 This will create a new thread that will begin execution with the specified
238 entry point function, and give it the I<ARGS> list as parameters.  It will
239 return the corresponding threads object, or C<undef> if thread creation failed.
240
241 I<FUNCTION> may either be the name of a function, an anonymous subroutine, or
242 a code ref.
243
244     my $thr = threads->create('func_name', ...);
245         # or
246     my $thr = threads->create(sub { ... }, ...);
247         # or
248     my $thr = threads->create(\&func, ...);
249
250 The C<-E<gt>new()> method is an alias for C<-E<gt>create()>.
251
252 =item $thr->join()
253
254 This will wait for the corresponding thread to complete its execution.  When
255 the thread finishes, C<-E<gt>join()> will return the return value(s) of the
256 entry point function.
257
258 The context (void, scalar or list) for the return value(s) for C<-E<gt>join()>
259 is determined at the time of thread creation.
260
261     # Create thread in list context (implicit)
262     my ($thr1) = threads->create(sub {
263                                     my @results = qw(a b c);
264                                     return (@results);
265                                  });
266     #   or (explicit)
267     my $thr1 = threads->create({'context' => 'list'},
268                                sub {
269                                     my @results = qw(a b c);
270                                     return (@results);
271                                });
272     # Retrieve list results from thread
273     my @res1 = $thr1->join();
274
275     # Create thread in scalar context (implicit)
276     my $thr2 = threads->create(sub {
277                                     my $result = 42;
278                                     return ($result);
279                                  });
280     # Retrieve scalar result from thread
281     my $res2 = $thr2->join();
282
283     # Create a thread in void context (explicit)
284     my $thr3 = threads->create({'void' => 1},
285                                sub { print("Hello, world\n"); });
286     # Join the thread in void context (i.e., no return value)
287     $thr3->join();
288
289 See L</"THREAD CONTEXT"> for more details.
290
291 If the program exits without all threads having either been joined or
292 detached, then a warning will be issued.
293
294 Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already joined thread will
295 cause an error to be thrown.
296
297 =item $thr->detach()
298
299 Makes the thread unjoinable, and causes any eventual return value to be
300 discarded.  When the program exits, any detached threads that are still
301 running are silently terminated.
302
303 If the program exits without all threads having either been joined or
304 detached, then a warning will be issued.
305
306 Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already detached thread
307 will cause an error to be thrown.
308
309 =item threads->detach()
310
311 Class method that allows a thread to detach itself.
312
313 =item threads->self()
314
315 Class method that allows a thread to obtain its own I<threads> object.
316
317 =item $thr->tid()
318
319 Returns the ID of the thread.  Thread IDs are unique integers with the main
320 thread in a program being 0, and incrementing by 1 for every thread created.
321
322 =item threads->tid()
323
324 Class method that allows a thread to obtain its own ID.
325
326 =item threads->object($tid)
327
328 This will return the I<threads> object for the I<active> thread associated
329 with the specified thread ID.  Returns C<undef> if there is no thread
330 associated with the TID, if the thread is joined or detached, if no TID is
331 specified or if the specified TID is undef.
332
333 =item threads->yield()
334
335 This is a suggestion to the OS to let this thread yield CPU time to other
336 threads.  What actually happens is highly dependent upon the underlying
337 thread implementation.
338
339 You may do C<use threads qw(yield)>, and then just use C<yield()> in your
340 code.
341
342 =item threads->list()
343
344 =item threads->list(threads::all)
345
346 =item threads->list(threads::running)
347
348 =item threads->list(threads::joinable)
349
350 With no arguments (or using C<threads::all>) and in a list context, returns a
351 list of all non-joined, non-detached I<threads> objects.  In a scalar context,
352 returns a count of the same.
353
354 With a I<true> argument (using C<threads::running>), returns a list of all
355 non-detached I<threads> objects that are still running.
356
357 With a I<false> argument (using C<threads::joinable>), returns a list of all
358 non-joined, non-detached I<threads> objects that have finished running (i.e.,
359 for which C<-E<gt>join()> will not I<block>).
360
361 =item $thr1->equal($thr2)
362
363 Tests if two threads objects are the same thread or not.  This is overloaded
364 to the more natural forms:
365
366     if ($thr1 == $thr2) {
367         print("Threads are the same\n");
368     }
369     # or
370     if ($thr1 != $thr2) {
371         print("Threads differ\n");
372     }
373
374 (Thread comparison is based on thread IDs.)
375
376 =item async BLOCK;
377
378 C<async> creates a thread to execute the block immediately following
379 it.  This block is treated as an anonymous subroutine, and so must have a
380 semi-colon after the closing brace.  Like C<threads->create()>, C<async>
381 returns a I<threads> object.
382
383 =item $thr->_handle()
384
385 This I<private> method returns the memory location of the internal thread
386 structure associated with a threads object.  For Win32, this is a pointer to
387 the C<HANDLE> value returned by C<CreateThread> (i.e., C<HANDLE *>); for other
388 platforms, it is a pointer to the C<pthread_t> structure used in the
389 C<pthread_create> call (i.e., C<pthread_t *>).
390
391 This method is of no use for general Perl threads programming.  Its intent is
392 to provide other (XS-based) thread modules with the capability to access, and
393 possibly manipulate, the underlying thread structure associated with a Perl
394 thread.
395
396 =item threads->_handle()
397
398 Class method that allows a thread to obtain its own I<handle>.
399
400 =back
401
402 =head1 EXITING A THREAD
403
404 The usual method for terminating a thread is to
405 L<return()|perlfunc/"return EXPR"> from the entry point function with the
406 appropriate return value(s).
407
408 =over
409
410 =item threads->exit()
411
412 If needed, a thread can be exited at any time by calling
413 C<threads-E<gt>exit()>.  This will cause the thread to return C<undef> in a
414 scalar context, or the empty list in a list context.
415
416 When called from the I<main> thread, this behaves the same as C<exit(0)>.
417
418 =item threads->exit(status)
419
420 When called from a thread, this behaves like C<threads-E<gt>exit()> (i.e., the
421 exit status code is ignored).
422
423 When called from the I<main> thread, this behaves the same as C<exit(status)>.
424
425 =item die()
426
427 Calling C<die()> in a thread indicates an abnormal exit for the thread.  Any
428 C<$SIG{__DIE__}> handler in the thread will be called first, and then the
429 thread will exit with a warning message that will contain any arguments passed
430 in the C<die()> call.
431
432 =item exit(status)
433
434 Calling L<exit()|perlfunc/"exit EXPR"> inside a thread causes the whole
435 application to terminate.  Because of this, the use of C<exit()> inside
436 threaded code, or in modules that might be used in threaded applications, is
437 strongly discouraged.
438
439 If C<exit()> really is needed, then consider using the following:
440
441     threads->exit() if threads->can('exit');   # Thread friendly
442     exit(status);
443
444 =item use threads 'exit' => 'thread_only'
445
446 This globally overrides the default behavior of calling C<exit()> inside a
447 thread, and effectively causes such calls to behave the same as
448 C<threads-E<gt>exit()>.  In other words, with this setting, calling C<exit()>
449 causes only the thread to terminate.
450
451 Because of its global effect, this setting should not be used inside modules
452 or the like.
453
454 The I<main> thread is unaffected by this setting.
455
456 =item threads->create({'exit' => 'thread_only'}, ...)
457
458 This overrides the default behavior of C<exit()> inside the newly created
459 thread only.
460
461 =item $thr->set_thread_exit_only(boolean)
462
463 This can be used to change the I<exit thread only> behavior for a thread after
464 it has been created.  With a I<true> argument, C<exit()> will cause the only
465 the thread to exit.  With a I<false> argument, C<exit()> will terminate the
466 application.
467
468 The I<main> thread is unaffected by this call.
469
470 =item threads->set_thread_exit_only(boolean)
471
472 Class method for use inside a thread to changes its own behavior for
473 C<exit()>.
474
475 The I<main> thread is unaffected by this call.
476
477 =back
478
479 =head1 THREAD STATE
480
481 The following boolean methods are useful in determining the I<state> of a
482 thread.
483
484 =over
485
486 =item $thr->is_running()
487
488 Returns true if a thread is still running (i.e., if its entry point function
489 has not yet finished/exited).
490
491 =item $thr->is_joinable()
492
493 Returns true if the thread has finished running, is not detached and has not
494 yet been joined.  In other works, the thread is ready to be joined and will
495 not I<block>.
496
497 =item $thr->is_detached()
498
499 Returns true if the thread has been detached.
500
501 =item threads->is_detached()
502
503 Class method that allows a thread to determine whether or not it is detached.
504
505 =back
506
507 =head1 THREAD CONTEXT
508
509 As with subroutines, the type of value returned from a thread's entry point
510 function may be determined by the thread's I<context>:  list, scalar or void.
511 The thread's context is determined at thread creation.  This is necessary so
512 that the context is available to the entry point function via
513 L<wantarray()|perlfunc/"wantarray">.  The thread may then specify a value of
514 the appropriate type to be returned from C<-E<gt>join()>.
515
516 =head2 Explicit context
517
518 Because thread creation and thread joining may occur in different contexts, it
519 may be desirable to state the context explicitly to the thread's entry point
520 function.  This may be done by calling C<-E<gt>create()> with a parameter hash
521 as the first argument:
522
523     my $thr = threads->create({'context' => 'list'}, \&foo);
524     ...
525     my @results = $thr->join();
526
527 In the above, the threads object is returned to the parent thread in scalar
528 context, and the thread's entry point function C<foo> will be called in list
529 context such that the parent thread can receive a list from the C<-E<gt>join()>
530 call.  Similarly, if you need the threads object, but your thread will not be
531 returning a value (i.e., I<void> context), you would do the following:
532
533     my $thr = threads->create({'context' => 'void'}, \&foo);
534     ...
535     $thr->join();
536
537 The context type may also be used as the I<key> in the parameter hash followed
538 by a I<true> value:
539
540     threads->create({'scalar' => 1}, \&foo);
541     ...
542     my ($thr) = threads->list();
543     my $result = $thr->join();
544
545 =head2 Implicit context
546
547 If not explicitly stated, the thread's context is implied from the context
548 of the C<-E<gt>create()> call:
549
550     # Create thread in list context
551     my ($thr) = threads->create(...);
552
553     # Create thread in scalar context
554     my $thr = threads->create(...);
555
556     # Create thread in void context
557     threads->create(...);
558
559 =head2 $thr->wantarray()
560
561 This returns the thread's context in the same manner as
562 L<wantarray()|perlfunc/"wantarray">.
563
564 =head2 threads->wantarray()
565
566 Class method to return the current thread's context.  This is the same as
567 running L<wantarray()|perlfunc/"wantarray"> in the current thread.
568
569 =head1 THREAD STACK SIZE
570
571 The default per-thread stack size for different platforms varies
572 significantly, and is almost always far more than is needed for most
573 applications.  On Win32, Perl's makefile explicitly sets the default stack to
574 16 MB; on most other platforms, the system default is used, which again may be
575 much larger than is needed.
576
577 By tuning the stack size to more accurately reflect your application's needs,
578 you may significantly reduce your application's memory usage, and increase the
579 number of simultaneously running threads.
580
581 N.B., on Windows, Address space allocation granularity is 64 KB, therefore,
582 setting the stack smaller than that on Win32 Perl will not save any more
583 memory.
584
585 =over
586
587 =item threads->get_stack_size();
588
589 Returns the current default per-thread stack size.  The default is zero, which
590 means the system default stack size is currently in use.
591
592 =item $size = $thr->get_stack_size();
593
594 Returns the stack size for a particular thread.  A return value of zero
595 indicates the system default stack size was used for the thread.
596
597 =item $old_size = threads->set_stack_size($new_size);
598
599 Sets a new default per-thread stack size, and returns the previous setting.
600
601 Some platforms have a minimum thread stack size.  Trying to set the stack size
602 below this value will result in a warning, and the minimum stack size will be
603 used.
604
605 Some Linux platforms have a maximum stack size.  Setting too large of a stack
606 size will cause thread creation to fail.
607
608 If needed, C<$new_size> will be rounded up to the next multiple of the memory
609 page size (usually 4096 or 8192).
610
611 Threads created after the stack size is set will then either call
612 C<pthread_attr_setstacksize()> I<(for pthreads platforms)>, or supply the
613 stack size to C<CreateThread()> I<(for Win32 Perl)>.
614
615 (Obviously, this call does not affect any currently extant threads.)
616
617 =item use threads ('stack_size' => VALUE);
618
619 This sets the default per-thread stack size at the start of the application.
620
621 =item $ENV{'PERL5_ITHREADS_STACK_SIZE'}
622
623 The default per-thread stack size may be set at the start of the application
624 through the use of the environment variable C<PERL5_ITHREADS_STACK_SIZE>:
625
626     PERL5_ITHREADS_STACK_SIZE=1048576
627     export PERL5_ITHREADS_STACK_SIZE
628     perl -e'use threads; print(threads->get_stack_size(), "\n")'
629
630 This value overrides any C<stack_size> parameter given to C<use threads>.  Its
631 primary purpose is to permit setting the per-thread stack size for legacy
632 threaded applications.
633
634 =item threads->create({'stack_size' => VALUE}, FUNCTION, ARGS)
635
636 The stack size an individual threads may also be specified.  This may be done
637 by calling C<-E<gt>create()> with a parameter hash as the first argument:
638
639     my $thr = threads->create({'stack_size' => 32*4096}, \&foo, @args);
640
641 =item $thr2 = $thr1->create(FUNCTION, ARGS)
642
643 This creates a new thread (C<$thr2>) that inherits the stack size from an
644 existing thread (C<$thr1>).  This is shorthand for the following:
645
646     my $stack_size = $thr1->get_stack_size();
647     my $thr2 = threads->create({'stack_size' => $stack_size}, FUNCTION, ARGS);
648
649 =back
650
651 =head1 THREAD SIGNALLING
652
653 When safe signals is in effect (the default behavior - see L</"Unsafe signals">
654 for more details), then signals may be sent and acted upon by individual
655 threads.
656
657 =over 4
658
659 =item $thr->kill('SIG...');
660
661 Sends the specified signal to the thread.  Signal names and (positive) signal
662 numbers are the same as those supported by
663 L<kill()|perlfunc/"kill SIGNAL, LIST">.  For example, 'SIGTERM', 'TERM' and
664 (depending on the OS) 15 are all valid arguments to C<-E<gt>kill()>.
665
666 Returns the thread object to allow for method chaining:
667
668     $thr->kill('SIG...')->join();
669
670 =back
671
672 Signal handlers need to be set up in the threads for the signals they are
673 expected to act upon.  Here's an example for I<cancelling> a thread:
674
675     use threads;
676
677     sub thr_func
678     {
679         # Thread 'cancellation' signal handler
680         $SIG{'KILL'} = sub { threads->exit(); };
681
682         ...
683     }
684
685     # Create a thread
686     my $thr = threads->create('thr_func');
687
688     ...
689
690     # Signal the thread to terminate, and then detach
691     # it so that it will get cleaned up automatically
692     $thr->kill('KILL')->detach();
693
694 Here's another simplistic example that illustrates the use of thread
695 signalling in conjunction with a semaphore to provide rudimentary I<suspend>
696 and I<resume> capabilities:
697
698     use threads;
699     use Thread::Semaphore;
700
701     sub thr_func
702     {
703         my $sema = shift;
704
705         # Thread 'suspend/resume' signal handler
706         $SIG{'STOP'} = sub {
707             $sema->down();      # Thread suspended
708             $sema->up();        # Thread resumes
709         };
710
711         ...
712     }
713
714     # Create a semaphore and send it to a thread
715     my $sema = Thread::Semaphore->new();
716     my $thr = threads->create('thr_func', $sema);
717
718     # Suspend the thread
719     $sema->down();
720     $thr->kill('STOP');
721
722     ...
723
724     # Allow the thread to continue
725     $sema->up();
726
727 CAVEAT:  The thread signalling capability provided by this module does not
728 actually send signals via the OS.  It I<emulates> signals at the Perl-level
729 such that signal handlers are called in the appropriate thread.  For example,
730 sending C<$thr-E<gt>kill('STOP')> does not actually suspend a thread (or the
731 whole process), but does cause a C<$SIG{'STOP'}> handler to be called in that
732 thread (as illustrated above).
733
734 As such, signals that would normally not be appropriate to use in the
735 C<kill()> command (e.g., C<kill('KILL', $$)>) are okay to use with the
736 C<-E<gt>kill()> method (again, as illustrated above).
737
738 Correspondingly, sending a signal to a thread does not disrupt the operation
739 the thread is currently working on:  The signal will be acted upon after the
740 current operation has completed.  For instance, if the thread is I<stuck> on
741 an I/O call, sending it a signal will not cause the I/O call to be interrupted
742 such that the signal is acted up immediately.
743
744 Sending a signal to a terminated thread is ignored.
745
746 =head1 WARNINGS
747
748 =over 4
749
750 =item Perl exited with active threads:
751
752 If the program exits without all threads having either been joined or
753 detached, then this warning will be issued.
754
755 NOTE:  If the I<main> thread exits, then this warning cannot be suppressed
756 using C<no warnings 'threads';> as suggested below.
757
758 =item Thread creation failed: pthread_create returned #
759
760 See the appropriate I<man> page for C<pthread_create> to determine the actual
761 cause for the failure.
762
763 =item Thread # terminated abnormally: ...
764
765 A thread terminated in some manner other than just returning from its entry
766 point function.  For example, the thread may have terminated using C<die>.
767
768 =item Using minimum thread stack size of #
769
770 Some platforms have a minimum thread stack size.  Trying to set the stack size
771 below this value will result in the above warning, and the stack size will be
772 set to the minimum.
773
774 =item Thread creation failed: pthread_attr_setstacksize(I<SIZE>) returned 22
775
776 The specified I<SIZE> exceeds the system's maximum stack size.  Use a smaller
777 value for the stack size.
778
779 =back
780
781 If needed, thread warnings can be suppressed by using:
782
783     no warnings 'threads';
784
785 in the appropriate scope.
786
787 =head1 ERRORS
788
789 =over 4
790
791 =item This Perl not built to support threads
792
793 The particular copy of Perl that you're trying to use was not built using the
794 C<useithreads> configuration option.
795
796 Having threads support requires all of Perl and all of the XS modules in the
797 Perl installation to be rebuilt; it is not just a question of adding the
798 L<threads> module (i.e., threaded and non-threaded Perls are binary
799 incompatible.)
800
801 =item Cannot change stack size of an existing thread
802
803 The stack size of currently extant threads cannot be changed, therefore, the
804 following results in the above error:
805
806     $thr->set_stack_size($size);
807
808 =item Cannot signal threads without safe signals
809
810 Safe signals must be in effect to use the C<-E<gt>kill()> signalling method.
811 See L</"Unsafe signals"> for more details.
812
813 =item Unrecognized signal name: ...
814
815 The particular copy of Perl that you're trying to use does not support the
816 specified signal being used in a C<-E<gt>kill()> call.
817
818 =back
819
820 =head1 BUGS
821
822 =over
823
824 =item Parent-child threads
825
826 On some platforms, it might not be possible to destroy I<parent> threads while
827 there are still existing I<child> threads.
828
829 =item Creating threads inside special blocks
830
831 Creating threads inside C<BEGIN>, C<CHECK> or C<INIT> blocks should not be
832 relied upon.  Depending on the Perl version and the application code, results
833 may range from success, to (apparently harmless) warnings of leaked scalar, or
834 all the way up to crashing of the Perl interpreter.
835
836 =item Unsafe signals
837
838 Since Perl 5.8.0, signals have been made safer in Perl by postponing their
839 handling until the interpreter is in a I<safe> state.  See
840 L<perl58delta/"Safe Signals"> and L<perlipc/"Deferred Signals (Safe Signals)">
841 for more details.
842
843 Safe signals is the default behavior, and the old, immediate, unsafe
844 signalling behavior is only in effect in the following situations:
845
846 =over 4
847
848 =item * Perl was been built with C<PERL_OLD_SIGNALS> (see C<perl -V>).
849
850 =item * The environment variable C<PERL_SIGNALS> is set to C<unsafe> (see L<perlrun/"PERL_SIGNALS">).
851
852 =item * The module L<Perl::Unsafe::Signals> is used.
853
854 =back
855
856 If unsafe signals is in effect, then signal handling is not thread-safe, and
857 the C<-E<gt>kill()> signalling method cannot be used.
858
859 =item Returning closures from threads
860
861 Returning closures from threads should not be relied upon.  Depending of the
862 Perl version and the application code, results may range from success, to
863 (apparently harmless) warnings of leaked scalar, or all the way up to crashing
864 of the Perl interpreter.
865
866 =item Perl Bugs and the CPAN Version of L<threads>
867
868 Support for threads extents beyond the code in this module (i.e.,
869 F<threads.pm> and F<threads.xs>), and into the Perl iterpreter itself.  Older
870 versions of Perl contain bugs that may manifest themselves despite using the
871 latest version of L<threads> from CPAN.  There is no workaround for this other
872 than upgrading to the lastest version of Perl.
873
874 (Before you consider posting a bug report, please consult, and possibly post a
875 message to the discussion forum to see if what you've encountered is a known
876 problem.)
877
878 =back
879
880 =head1 REQUIREMENTS
881
882 Perl 5.8.0 or later
883
884 =head1 SEE ALSO
885
886 L<threads> Discussion Forum on CPAN:
887 L<http://www.cpanforum.com/dist/threads>
888
889 Annotated POD for L<threads>:
890 L<http://annocpan.org/~JDHEDDEN/threads-1.37/threads.pm>
891
892 L<threads::shared>, L<perlthrtut>
893
894 L<http://www.perl.com/pub/a/2002/06/11/threads.html> and
895 L<http://www.perl.com/pub/a/2002/09/04/threads.html>
896
897 Perl threads mailing list:
898 L<http://lists.cpan.org/showlist.cgi?name=iThreads>
899
900 Stack size discussion:
901 L<http://www.perlmonks.org/?node_id=532956>
902
903 =head1 AUTHOR
904
905 Artur Bergman E<lt>sky AT crucially DOT netE<gt>
906
907 threads is released under the same license as Perl.
908
909 CPAN version produced by Jerry D. Hedden <jdhedden AT cpan DOT org>
910
911 =head1 ACKNOWLEDGEMENTS
912
913 Richard Soderberg E<lt>perl AT crystalflame DOT netE<gt> -
914 Helping me out tons, trying to find reasons for races and other weird bugs!
915
916 Simon Cozens E<lt>simon AT brecon DOT co DOT ukE<gt> -
917 Being there to answer zillions of annoying questions
918
919 Rocco Caputo E<lt>troc AT netrus DOT netE<gt>
920
921 Vipul Ved Prakash E<lt>mail AT vipul DOT netE<gt> -
922 Helping with debugging
923
924 Dean Arnold E<lt>darnold AT presicient DOT comE<gt> -
925 Stack size API
926
927 =cut