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