1package threads; 2 3use 5.008; 4 5use strict; 6use warnings; 7 8our $VERSION = '1.86'; 9my $XS_VERSION = $VERSION; 10$VERSION = eval $VERSION; 11 12# Verify this Perl supports threads 13require Config; 14if (! $Config::Config{useithreads}) { 15 die("This Perl not built to support threads\n"); 16} 17 18# Complain if 'threads' is loaded after 'threads::shared' 19if ($threads::shared::threads_shared) { 20 warn <<'_MSG_'; 21Warning, threads::shared has already been loaded. To 22enable shared variables, 'use threads' must be called 23before threads::shared or any module that uses it. 24_MSG_ 25} 26 27# Declare that we have been loaded 28$threads::threads = 1; 29 30# Load the XS code 31require XSLoader; 32XSLoader::load('threads', $XS_VERSION); 33 34 35### Export ### 36 37sub import 38{ 39 my $class = shift; # Not used 40 41 # Exported subroutines 42 my @EXPORT = qw(async); 43 44 # Handle args 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); 50 } else { 51 $threads::thread_exit_only = $arg =~ /^thread/i; 52 } 53 } else { 54 require Carp; 55 Carp::croak("threads: Missing argument for option: $sym"); 56 } 57 58 } elsif ($sym =~ /^str/i) { 59 import overload ('""' => \&tid); 60 61 } elsif ($sym =~ /^(?::all|yield)$/) { 62 push(@EXPORT, qw(yield)); 63 64 } else { 65 require Carp; 66 Carp::croak("threads: Unknown import option: $sym"); 67 } 68 } 69 70 # Export subroutine names 71 my $caller = caller(); 72 foreach my $sym (@EXPORT) { 73 no strict 'refs'; 74 *{$caller.'::'.$sym} = \&{$sym}; 75 } 76 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'}); 80 } 81} 82 83 84### Methods, etc. ### 85 86# Exit from a thread (only) 87sub exit 88{ 89 my ($class, $status) = @_; 90 if (! defined($status)) { 91 $status = 0; 92 } 93 94 # Class method only 95 if (ref($class)) { 96 require Carp; 97 Carp::croak('Usage: threads->exit(status)'); 98 } 99 100 $class->set_thread_exit_only(1); 101 CORE::exit($status); 102} 103 104# 'Constant' args for threads->list() 105sub threads::all { } 106sub threads::running { 1 } 107sub threads::joinable { 0 } 108 109# 'new' is an alias for 'create' 110*new = \&create; 111 112# 'async' is a function alias for the 'threads->create()' method 113sub async (&;@) 114{ 115 unshift(@_, 'threads'); 116 # Use "goto" trick to avoid pad problems from 5.8.1 (fixed in 5.8.2) 117 goto &create; 118} 119 120# Thread object equality checking 121use overload ( 122 '==' => \&equal, 123 '!=' => sub { ! equal(@_) }, 124 'fallback' => 1 125); 126 1271; 128 129__END__ 130 131=head1 NAME 132 133threads - Perl interpreter-based threads 134 135=head1 VERSION 136 137This document describes threads version 1.86 138 139=head1 SYNOPSIS 140 141 use threads ('yield', 142 'stack_size' => 64*4096, 143 'exit' => 'threads_only', 144 'stringify'); 145 146 sub start_thread { 147 my @args = @_; 148 print('Thread started: ', join(' ', @args), "\n"); 149 } 150 my $thr = threads->create('start_thread', 'argument'); 151 $thr->join(); 152 153 threads->create(sub { print("I am a thread\n"); })->join(); 154 155 my $thr2 = async { foreach (@files) { ... } }; 156 $thr2->join(); 157 if (my $err = $thr2->error()) { 158 warn("Thread error: $err\n"); 159 } 160 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(); 167 168 $thr->detach(); 169 170 # Get a thread's object 171 $thr = threads->self(); 172 $thr = threads->object($tid); 173 174 # Get a thread's ID 175 $tid = threads->tid(); 176 $tid = $thr->tid(); 177 $tid = "$thr"; 178 179 # Give other threads a chance to run 180 threads->yield(); 181 yield(); 182 183 # Lists of non-detached threads 184 my @threads = threads->list(); 185 my $thread_count = threads->list(); 186 187 my @running = threads->list(threads::running); 188 my @joinable = threads->list(threads::joinable); 189 190 # Test thread objects 191 if ($thr1 == $thr2) { 192 ... 193 } 194 195 # Manage thread stack size 196 $stack_size = threads->get_stack_size(); 197 $old_size = threads->set_stack_size(32*4096); 198 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' }, 203 \&foo); 204 205 # Get thread's context 206 my $wantarray = $thr->wantarray(); 207 208 # Check thread's state 209 if ($thr->is_running()) { 210 sleep(1); 211 } 212 if ($thr->is_joinable()) { 213 $thr->join(); 214 } 215 216 # Send a signal to a thread 217 $thr->kill('SIGUSR1'); 218 219 # Exit a thread 220 threads->exit(); 221 222=head1 DESCRIPTION 223 224Since Perl 5.8, thread programming has been available using a model called 225I<interpreter threads> which provides a new Perl interpreter for each 226thread, and, by default, results in no data or state information being shared 227between threads. 228 229(Prior to Perl 5.8, I<5005threads> was available through the C<Thread.pm> API. 230This threading model has been deprecated, and was removed as of Perl 5.10.0.) 231 232As just mentioned, all variables are, by default, thread local. To use shared 233variables, you need to also load L<threads::shared>: 234 235 use threads; 236 use threads::shared; 237 238When loading L<threads::shared>, you must C<use threads> before you 239C<use threads::shared>. (C<threads> will emit a warning if you do it the 240other way around.) 241 242It is strongly recommended that you enable threads via C<use threads> as early 243as possible in your script. 244 245If needed, scripts can be written so as to run on both threaded and 246non-threaded Perls: 247 248 my $can_use_threads = eval 'use threads; 1'; 249 if ($can_use_threads) { 250 # Do processing using threads 251 ... 252 } else { 253 # Do it without using threads 254 ... 255 } 256 257=over 258 259=item $thr = threads->create(FUNCTION, ARGS) 260 261This will create a new thread that will begin execution with the specified 262entry point function, and give it the I<ARGS> list as parameters. It will 263return the corresponding threads object, or C<undef> if thread creation failed. 264 265I<FUNCTION> may either be the name of a function, an anonymous subroutine, or 266a code ref. 267 268 my $thr = threads->create('func_name', ...); 269 # or 270 my $thr = threads->create(sub { ... }, ...); 271 # or 272 my $thr = threads->create(\&func, ...); 273 274The C<-E<gt>new()> method is an alias for C<-E<gt>create()>. 275 276=item $thr->join() 277 278This will wait for the corresponding thread to complete its execution. When 279the thread finishes, C<-E<gt>join()> will return the return value(s) of the 280entry point function. 281 282The context (void, scalar or list) for the return value(s) for C<-E<gt>join()> 283is determined at the time of thread creation. 284 285 # Create thread in list context (implicit) 286 my ($thr1) = threads->create(sub { 287 my @results = qw(a b c); 288 return (@results); 289 }); 290 # or (explicit) 291 my $thr1 = threads->create({'context' => 'list'}, 292 sub { 293 my @results = qw(a b c); 294 return (@results); 295 }); 296 # Retrieve list results from thread 297 my @res1 = $thr1->join(); 298 299 # Create thread in scalar context (implicit) 300 my $thr2 = threads->create(sub { 301 my $result = 42; 302 return ($result); 303 }); 304 # Retrieve scalar result from thread 305 my $res2 = $thr2->join(); 306 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) 311 $thr3->join(); 312 313See L</"THREAD CONTEXT"> for more details. 314 315If the program exits without all threads having either been joined or 316detached, then a warning will be issued. 317 318Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already joined thread will 319cause an error to be thrown. 320 321=item $thr->detach() 322 323Makes the thread unjoinable, and causes any eventual return value to be 324discarded. When the program exits, any detached threads that are still 325running are silently terminated. 326 327If the program exits without all threads having either been joined or 328detached, then a warning will be issued. 329 330Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already detached thread 331will cause an error to be thrown. 332 333=item threads->detach() 334 335Class method that allows a thread to detach itself. 336 337=item threads->self() 338 339Class method that allows a thread to obtain its own I<threads> object. 340 341=item $thr->tid() 342 343Returns the ID of the thread. Thread IDs are unique integers with the main 344thread in a program being 0, and incrementing by 1 for every thread created. 345 346=item threads->tid() 347 348Class method that allows a thread to obtain its own ID. 349 350=item "$thr" 351 352If you add the C<stringify> import option to your C<use threads> declaration, 353then using a threads object in a string or a string context (e.g., as a hash 354key) will cause its ID to be used as the value: 355 356 use threads qw(stringify); 357 358 my $thr = threads->create(...); 359 print("Thread $thr started...\n"); # Prints out: Thread 1 started... 360 361=item threads->object($tid) 362 363This will return the I<threads> object for the I<active> thread associated 364with the specified thread ID. If C<$tid> is the value for the current thread, 365then this call works the same as C<-E<gt>self()>. Otherwise, returns C<undef> 366if there is no thread associated with the TID, if the thread is joined or 367detached, if no TID is specified or if the specified TID is undef. 368 369=item threads->yield() 370 371This is a suggestion to the OS to let this thread yield CPU time to other 372threads. What actually happens is highly dependent upon the underlying 373thread implementation. 374 375You may do C<use threads qw(yield)>, and then just use C<yield()> in your 376code. 377 378=item threads->list() 379 380=item threads->list(threads::all) 381 382=item threads->list(threads::running) 383 384=item threads->list(threads::joinable) 385 386With no arguments (or using C<threads::all>) and in a list context, returns a 387list of all non-joined, non-detached I<threads> objects. In a scalar context, 388returns a count of the same. 389 390With a I<true> argument (using C<threads::running>), returns a list of all 391non-joined, non-detached I<threads> objects that are still running. 392 393With a I<false> argument (using C<threads::joinable>), returns a list of all 394non-joined, non-detached I<threads> objects that have finished running (i.e., 395for which C<-E<gt>join()> will not I<block>). 396 397=item $thr1->equal($thr2) 398 399Tests if two threads objects are the same thread or not. This is overloaded 400to the more natural forms: 401 402 if ($thr1 == $thr2) { 403 print("Threads are the same\n"); 404 } 405 # or 406 if ($thr1 != $thr2) { 407 print("Threads differ\n"); 408 } 409 410(Thread comparison is based on thread IDs.) 411 412=item async BLOCK; 413 414C<async> creates a thread to execute the block immediately following 415it. This block is treated as an anonymous subroutine, and so must have a 416semicolon after the closing brace. Like C<threads-E<gt>create()>, C<async> 417returns a I<threads> object. 418 419=item $thr->error() 420 421Threads are executed in an C<eval> context. This method will return C<undef> 422if the thread terminates I<normally>. Otherwise, it returns the value of 423C<$@> associated with the thread's execution status in its C<eval> context. 424 425=item $thr->_handle() 426 427This I<private> method returns the memory location of the internal thread 428structure associated with a threads object. For Win32, this is a pointer to 429the C<HANDLE> value returned by C<CreateThread> (i.e., C<HANDLE *>); for other 430platforms, it is a pointer to the C<pthread_t> structure used in the 431C<pthread_create> call (i.e., C<pthread_t *>). 432 433This method is of no use for general Perl threads programming. Its intent is 434to provide other (XS-based) thread modules with the capability to access, and 435possibly manipulate, the underlying thread structure associated with a Perl 436thread. 437 438=item threads->_handle() 439 440Class method that allows a thread to obtain its own I<handle>. 441 442=back 443 444=head1 EXITING A THREAD 445 446The usual method for terminating a thread is to 447L<return()|perlfunc/"return EXPR"> from the entry point function with the 448appropriate return value(s). 449 450=over 451 452=item threads->exit() 453 454If needed, a thread can be exited at any time by calling 455C<threads-E<gt>exit()>. This will cause the thread to return C<undef> in a 456scalar context, or the empty list in a list context. 457 458When called from the I<main> thread, this behaves the same as C<exit(0)>. 459 460=item threads->exit(status) 461 462When called from a thread, this behaves like C<threads-E<gt>exit()> (i.e., the 463exit status code is ignored). 464 465When called from the I<main> thread, this behaves the same as C<exit(status)>. 466 467=item die() 468 469Calling C<die()> in a thread indicates an abnormal exit for the thread. Any 470C<$SIG{__DIE__}> handler in the thread will be called first, and then the 471thread will exit with a warning message that will contain any arguments passed 472in the C<die()> call. 473 474=item exit(status) 475 476Calling L<exit()|perlfunc/"exit EXPR"> inside a thread causes the whole 477application to terminate. Because of this, the use of C<exit()> inside 478threaded code, or in modules that might be used in threaded applications, is 479strongly discouraged. 480 481If C<exit()> really is needed, then consider using the following: 482 483 threads->exit() if threads->can('exit'); # Thread friendly 484 exit(status); 485 486=item use threads 'exit' => 'threads_only' 487 488This globally overrides the default behavior of calling C<exit()> inside a 489thread, and effectively causes such calls to behave the same as 490C<threads-E<gt>exit()>. In other words, with this setting, calling C<exit()> 491causes only the thread to terminate. 492 493Because of its global effect, this setting should not be used inside modules 494or the like. 495 496The I<main> thread is unaffected by this setting. 497 498=item threads->create({'exit' => 'thread_only'}, ...) 499 500This overrides the default behavior of C<exit()> inside the newly created 501thread only. 502 503=item $thr->set_thread_exit_only(boolean) 504 505This can be used to change the I<exit thread only> behavior for a thread after 506it has been created. With a I<true> argument, C<exit()> will cause only the 507thread to exit. With a I<false> argument, C<exit()> will terminate the 508application. 509 510The I<main> thread is unaffected by this call. 511 512=item threads->set_thread_exit_only(boolean) 513 514Class method for use inside a thread to change its own behavior for C<exit()>. 515 516The I<main> thread is unaffected by this call. 517 518=back 519 520=head1 THREAD STATE 521 522The following boolean methods are useful in determining the I<state> of a 523thread. 524 525=over 526 527=item $thr->is_running() 528 529Returns true if a thread is still running (i.e., if its entry point function 530has not yet finished or exited). 531 532=item $thr->is_joinable() 533 534Returns true if the thread has finished running, is not detached and has not 535yet been joined. In other words, the thread is ready to be joined, and a call 536to C<$thr-E<gt>join()> will not I<block>. 537 538=item $thr->is_detached() 539 540Returns true if the thread has been detached. 541 542=item threads->is_detached() 543 544Class method that allows a thread to determine whether or not it is detached. 545 546=back 547 548=head1 THREAD CONTEXT 549 550As with subroutines, the type of value returned from a thread's entry point 551function may be determined by the thread's I<context>: list, scalar or void. 552The thread's context is determined at thread creation. This is necessary so 553that the context is available to the entry point function via 554L<wantarray()|perlfunc/"wantarray">. The thread may then specify a value of 555the appropriate type to be returned from C<-E<gt>join()>. 556 557=head2 Explicit context 558 559Because thread creation and thread joining may occur in different contexts, it 560may be desirable to state the context explicitly to the thread's entry point 561function. This may be done by calling C<-E<gt>create()> with a hash reference 562as the first argument: 563 564 my $thr = threads->create({'context' => 'list'}, \&foo); 565 ... 566 my @results = $thr->join(); 567 568In the above, the threads object is returned to the parent thread in scalar 569context, 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 571the C<-E<gt>join()> call. (C<'array'> is synonymous with C<'list'>.) 572 573Similarly, if you need the threads object, but your thread will not be 574returning a value (i.e., I<void> context), you would do the following: 575 576 my $thr = threads->create({'context' => 'void'}, \&foo); 577 ... 578 $thr->join(); 579 580The context type may also be used as the I<key> in the hash reference followed 581by a I<true> value: 582 583 threads->create({'scalar' => 1}, \&foo); 584 ... 585 my ($thr) = threads->list(); 586 my $result = $thr->join(); 587 588=head2 Implicit context 589 590If not explicitly stated, the thread's context is implied from the context 591of the C<-E<gt>create()> call: 592 593 # Create thread in list context 594 my ($thr) = threads->create(...); 595 596 # Create thread in scalar context 597 my $thr = threads->create(...); 598 599 # Create thread in void context 600 threads->create(...); 601 602=head2 $thr->wantarray() 603 604This returns the thread's context in the same manner as 605L<wantarray()|perlfunc/"wantarray">. 606 607=head2 threads->wantarray() 608 609Class method to return the current thread's context. This returns the same 610value as running L<wantarray()|perlfunc/"wantarray"> inside the current 611thread's entry point function. 612 613=head1 THREAD STACK SIZE 614 615The default per-thread stack size for different platforms varies 616significantly, and is almost always far more than is needed for most 617applications. On Win32, Perl's makefile explicitly sets the default stack to 61816 MB; on most other platforms, the system default is used, which again may be 619much larger than is needed. 620 621By tuning the stack size to more accurately reflect your application's needs, 622you may significantly reduce your application's memory usage, and increase the 623number of simultaneously running threads. 624 625Note that on Windows, address space allocation granularity is 64 KB, 626therefore, setting the stack smaller than that on Win32 Perl will not save any 627more memory. 628 629=over 630 631=item threads->get_stack_size(); 632 633Returns the current default per-thread stack size. The default is zero, which 634means the system default stack size is currently in use. 635 636=item $size = $thr->get_stack_size(); 637 638Returns the stack size for a particular thread. A return value of zero 639indicates the system default stack size was used for the thread. 640 641=item $old_size = threads->set_stack_size($new_size); 642 643Sets a new default per-thread stack size, and returns the previous setting. 644 645Some platforms have a minimum thread stack size. Trying to set the stack size 646below this value will result in a warning, and the minimum stack size will be 647used. 648 649Some Linux platforms have a maximum stack size. Setting too large of a stack 650size will cause thread creation to fail. 651 652If needed, C<$new_size> will be rounded up to the next multiple of the memory 653page size (usually 4096 or 8192). 654 655Threads created after the stack size is set will then either call 656C<pthread_attr_setstacksize()> I<(for pthreads platforms)>, or supply the 657stack size to C<CreateThread()> I<(for Win32 Perl)>. 658 659(Obviously, this call does not affect any currently extant threads.) 660 661=item use threads ('stack_size' => VALUE); 662 663This sets the default per-thread stack size at the start of the application. 664 665=item $ENV{'PERL5_ITHREADS_STACK_SIZE'} 666 667The default per-thread stack size may be set at the start of the application 668through the use of the environment variable C<PERL5_ITHREADS_STACK_SIZE>: 669 670 PERL5_ITHREADS_STACK_SIZE=1048576 671 export PERL5_ITHREADS_STACK_SIZE 672 perl -e'use threads; print(threads->get_stack_size(), "\n")' 673 674This value overrides any C<stack_size> parameter given to C<use threads>. Its 675primary purpose is to permit setting the per-thread stack size for legacy 676threaded applications. 677 678=item threads->create({'stack_size' => VALUE}, FUNCTION, ARGS) 679 680To specify a particular stack size for any individual thread, call 681C<-E<gt>create()> with a hash reference as the first argument: 682 683 my $thr = threads->create({'stack_size' => 32*4096}, \&foo, @args); 684 685=item $thr2 = $thr1->create(FUNCTION, ARGS) 686 687This creates a new thread (C<$thr2>) that inherits the stack size from an 688existing thread (C<$thr1>). This is shorthand for the following: 689 690 my $stack_size = $thr1->get_stack_size(); 691 my $thr2 = threads->create({'stack_size' => $stack_size}, FUNCTION, ARGS); 692 693=back 694 695=head1 THREAD SIGNALLING 696 697When safe signals is in effect (the default behavior - see L</"Unsafe signals"> 698for more details), then signals may be sent and acted upon by individual 699threads. 700 701=over 4 702 703=item $thr->kill('SIG...'); 704 705Sends the specified signal to the thread. Signal names and (positive) signal 706numbers are the same as those supported by 707L<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()>. 709 710Returns the thread object to allow for method chaining: 711 712 $thr->kill('SIG...')->join(); 713 714=back 715 716Signal handlers need to be set up in the threads for the signals they are 717expected to act upon. Here's an example for I<cancelling> a thread: 718 719 use threads; 720 721 sub thr_func 722 { 723 # Thread 'cancellation' signal handler 724 $SIG{'KILL'} = sub { threads->exit(); }; 725 726 ... 727 } 728 729 # Create a thread 730 my $thr = threads->create('thr_func'); 731 732 ... 733 734 # Signal the thread to terminate, and then detach 735 # it so that it will get cleaned up automatically 736 $thr->kill('KILL')->detach(); 737 738Here's another simplistic example that illustrates the use of thread 739signalling in conjunction with a semaphore to provide rudimentary I<suspend> 740and I<resume> capabilities: 741 742 use threads; 743 use Thread::Semaphore; 744 745 sub thr_func 746 { 747 my $sema = shift; 748 749 # Thread 'suspend/resume' signal handler 750 $SIG{'STOP'} = sub { 751 $sema->down(); # Thread suspended 752 $sema->up(); # Thread resumes 753 }; 754 755 ... 756 } 757 758 # Create a semaphore and pass it to a thread 759 my $sema = Thread::Semaphore->new(); 760 my $thr = threads->create('thr_func', $sema); 761 762 # Suspend the thread 763 $sema->down(); 764 $thr->kill('STOP'); 765 766 ... 767 768 # Allow the thread to continue 769 $sema->up(); 770 771CAVEAT: The thread signalling capability provided by this module does not 772actually send signals via the OS. It I<emulates> signals at the Perl-level 773such that signal handlers are called in the appropriate thread. For example, 774sending C<$thr-E<gt>kill('STOP')> does not actually suspend a thread (or the 775whole process), but does cause a C<$SIG{'STOP'}> handler to be called in that 776thread (as illustrated above). 777 778As such, signals that would normally not be appropriate to use in the 779C<kill()> command (e.g., C<kill('KILL', $$)>) are okay to use with the 780C<-E<gt>kill()> method (again, as illustrated above). 781 782Correspondingly, sending a signal to a thread does not disrupt the operation 783the thread is currently working on: The signal will be acted upon after the 784current operation has completed. For instance, if the thread is I<stuck> on 785an I/O call, sending it a signal will not cause the I/O call to be interrupted 786such that the signal is acted up immediately. 787 788Sending a signal to a terminated thread is ignored. 789 790=head1 WARNINGS 791 792=over 4 793 794=item Perl exited with active threads: 795 796If the program exits without all threads having either been joined or 797detached, then this warning will be issued. 798 799NOTE: If the I<main> thread exits, then this warning cannot be suppressed 800using C<no warnings 'threads';> as suggested below. 801 802=item Thread creation failed: pthread_create returned # 803 804See the appropriate I<man> page for C<pthread_create> to determine the actual 805cause for the failure. 806 807=item Thread # terminated abnormally: ... 808 809A thread terminated in some manner other than just returning from its entry 810point function, or by using C<threads-E<gt>exit()>. For example, the thread 811may have terminated because of an error, or by using C<die>. 812 813=item Using minimum thread stack size of # 814 815Some platforms have a minimum thread stack size. Trying to set the stack size 816below this value will result in the above warning, and the stack size will be 817set to the minimum. 818 819=item Thread creation failed: pthread_attr_setstacksize(I<SIZE>) returned 22 820 821The specified I<SIZE> exceeds the system's maximum stack size. Use a smaller 822value for the stack size. 823 824=back 825 826If needed, thread warnings can be suppressed by using: 827 828 no warnings 'threads'; 829 830in the appropriate scope. 831 832=head1 ERRORS 833 834=over 4 835 836=item This Perl not built to support threads 837 838The particular copy of Perl that you're trying to use was not built using the 839C<useithreads> configuration option. 840 841Having threads support requires all of Perl and all of the XS modules in the 842Perl installation to be rebuilt; it is not just a question of adding the 843L<threads> module (i.e., threaded and non-threaded Perls are binary 844incompatible.) 845 846=item Cannot change stack size of an existing thread 847 848The stack size of currently extant threads cannot be changed, therefore, the 849following results in the above error: 850 851 $thr->set_stack_size($size); 852 853=item Cannot signal threads without safe signals 854 855Safe signals must be in effect to use the C<-E<gt>kill()> signalling method. 856See L</"Unsafe signals"> for more details. 857 858=item Unrecognized signal name: ... 859 860The particular copy of Perl that you're trying to use does not support the 861specified signal being used in a C<-E<gt>kill()> call. 862 863=back 864 865=head1 BUGS AND LIMITATIONS 866 867Before you consider posting a bug report, please consult, and possibly post a 868message to the discussion forum to see if what you've encountered is a known 869problem. 870 871=over 872 873=item Thread-safe modules 874 875See L<perlmod/"Making your module threadsafe"> when creating modules that may 876be used in threaded applications, especially if those modules use non-Perl 877data, or XS code. 878 879=item Using non-thread-safe modules 880 881Unfortunately, you may encounter Perl modules that are not I<thread-safe>. 882For example, they may crash the Perl interpreter during execution, or may dump 883core on termination. Depending on the module and the requirements of your 884application, it may be possible to work around such difficulties. 885 886If the module will only be used inside a thread, you can try loading the 887module from inside the thread entry point function using C<require> (and 888C<import> if needed): 889 890 sub thr_func 891 { 892 require Unsafe::Module 893 # Unsafe::Module->import(...); 894 895 .... 896 } 897 898If the module is needed inside the I<main> thread, try modifying your 899application so that the module is loaded (again using C<require> and 900C<-E<gt>import()>) after any threads are started, and in such a way that no 901other threads are started afterwards. 902 903If the above does not work, or is not adequate for your application, then file 904a bug report on L<http://rt.cpan.org/Public/> against the problematic module. 905 906=item Memory consumption 907 908On most systems, frequent and continual creation and destruction of threads 909can lead to ever-increasing growth in the memory footprint of the Perl 910interpreter. While it is simple to just launch threads and then 911C<-E<gt>join()> or C<-E<gt>detach()> them, for long-lived applications, it is 912better to maintain a pool of threads, and to reuse them for the work needed, 913using L<queues|Thread::Queue> to notify threads of pending work. The CPAN 914distribution of this module contains a simple example 915(F<examples/pool_reuse.pl>) illustrating the creation, use and monitoring of a 916pool of I<reusable> threads. 917 918=item Current working directory 919 920On all platforms except MSWin32, the setting for the current working directory 921is shared among all threads such that changing it in one thread (e.g., using 922C<chdir()>) will affect all the threads in the application. 923 924On MSWin32, each thread maintains its own the current working directory 925setting. 926 927=item Environment variables 928 929Currently, on all platforms except MSWin32, all I<system> calls (e.g., using 930C<system()> or back-ticks) made from threads use the environment variable 931settings from the I<main> thread. In other words, changes made to C<%ENV> in 932a thread will not be visible in I<system> calls made by that thread. 933 934To work around this, set environment variables as part of the I<system> call. 935For example: 936 937 my $msg = 'hello'; 938 system("FOO=$msg; echo \$FOO"); # Outputs 'hello' to STDOUT 939 940On MSWin32, each thread maintains its own set of environment variables. 941 942=item Catching signals 943 944Signals are I<caught> by the main thread (thread ID = 0) of a script. 945Therefore, setting up signal handlers in threads for purposes other than 946L</"THREAD SIGNALLING"> as documented above will not accomplish what is 947intended. 948 949This is especially true if trying to catch C<SIGALRM> in a thread. To handle 950alarms in threads, set up a signal handler in the main thread, and then use 951L</"THREAD SIGNALLING"> to relay the signal to the thread: 952 953 # Create thread with a task that may time out 954 my $thr->create(sub { 955 threads->yield(); 956 eval { 957 $SIG{ALRM} = sub { die("Timeout\n"); }; 958 alarm(10); 959 ... # Do work here 960 alarm(0); 961 }; 962 if ($@ =~ /Timeout/) { 963 warn("Task in thread timed out\n"); 964 } 965 }; 966 967 # Set signal handler to relay SIGALRM to thread 968 $SIG{ALRM} = sub { $thr->kill('ALRM') }; 969 970 ... # Main thread continues working 971 972=item Parent-child threads 973 974On some platforms, it might not be possible to destroy I<parent> threads while 975there are still existing I<child> threads. 976 977=item Creating threads inside special blocks 978 979Creating threads inside C<BEGIN>, C<CHECK> or C<INIT> blocks should not be 980relied upon. Depending on the Perl version and the application code, results 981may range from success, to (apparently harmless) warnings of leaked scalar, or 982all the way up to crashing of the Perl interpreter. 983 984=item Unsafe signals 985 986Since Perl 5.8.0, signals have been made safer in Perl by postponing their 987handling until the interpreter is in a I<safe> state. See 988L<perl58delta/"Safe Signals"> and L<perlipc/"Deferred Signals (Safe Signals)"> 989for more details. 990 991Safe signals is the default behavior, and the old, immediate, unsafe 992signalling behavior is only in effect in the following situations: 993 994=over 4 995 996=item * Perl has been built with C<PERL_OLD_SIGNALS> (see C<perl -V>). 997 998=item * The environment variable C<PERL_SIGNALS> is set to C<unsafe> (see L<perlrun/"PERL_SIGNALS">). 999 1000=item * The module L<Perl::Unsafe::Signals> is used. 1001 1002=back 1003 1004If unsafe signals is in effect, then signal handling is not thread-safe, and 1005the C<-E<gt>kill()> signalling method cannot be used. 1006 1007=item Returning closures from threads 1008 1009Returning closures from threads should not be relied upon. Depending of the 1010Perl version and the application code, results may range from success, to 1011(apparently harmless) warnings of leaked scalar, or all the way up to crashing 1012of the Perl interpreter. 1013 1014=item Returning objects from threads 1015 1016Returning objects from threads does not work. Depending on the classes 1017involved, you may be able to work around this by returning a serialized 1018version of the object (e.g., using L<Data::Dumper> or L<Storable>), and then 1019reconstituting it in the joining thread. If you're using Perl 5.10.0 or 1020later, and if the class supports L<shared objects|threads::shared/"OBJECTS">, 1021you can pass them via L<shared queues|Thread::Queue>. 1022 1023=item END blocks in threads 1024 1025It is possible to add L<END blocks|perlmod/"BEGIN, UNITCHECK, CHECK, INIT and 1026END"> to threads by using L<require|perlfunc/"require VERSION"> or 1027L<eval|perlfunc/"eval EXPR"> with the appropriate code. These C<END> blocks 1028will then be executed when the thread's interpreter is destroyed (i.e., either 1029during a C<-E<gt>join()> call, or at program termination). 1030 1031However, calling any L<threads> methods in such an C<END> block will most 1032likely I<fail> (e.g., the application may hang, or generate an error) due to 1033mutexes that are needed to control functionality within the L<threads> module. 1034 1035For this reason, the use of C<END> blocks in threads is B<strongly> 1036discouraged. 1037 1038=item Open directory handles 1039 1040In perl 5.14 and higher, on systems other than Windows that do 1041not support the C<fchdir> C function, directory handles (see 1042L<opendir|perlfunc/"opendir DIRHANDLE,EXPR">) will not be copied to new 1043threads. You can use the C<d_fchdir> variable in L<Config.pm|Config> to 1044determine whether your system supports it. 1045 1046In prior perl versions, spawning threads with open directory handles would 1047crash the interpreter. 1048L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154> 1049 1050=item Perl Bugs and the CPAN Version of L<threads> 1051 1052Support for threads extends beyond the code in this module (i.e., 1053F<threads.pm> and F<threads.xs>), and into the Perl interpreter itself. Older 1054versions of Perl contain bugs that may manifest themselves despite using the 1055latest version of L<threads> from CPAN. There is no workaround for this other 1056than upgrading to the latest version of Perl. 1057 1058Even with the latest version of Perl, it is known that certain constructs 1059with threads may result in warning messages concerning leaked scalars or 1060unreferenced scalars. However, such warnings are harmless, and may safely be 1061ignored. 1062 1063You can search for L<threads> related bug reports at 1064L<http://rt.cpan.org/Public/>. If needed submit any new bugs, problems, 1065patches, etc. to: L<http://rt.cpan.org/Public/Dist/Display.html?Name=threads> 1066 1067=back 1068 1069=head1 REQUIREMENTS 1070 1071Perl 5.8.0 or later 1072 1073=head1 SEE ALSO 1074 1075L<threads> Discussion Forum on CPAN: 1076L<http://www.cpanforum.com/dist/threads> 1077 1078L<threads::shared>, L<perlthrtut> 1079 1080L<http://www.perl.com/pub/a/2002/06/11/threads.html> and 1081L<http://www.perl.com/pub/a/2002/09/04/threads.html> 1082 1083Perl threads mailing list: 1084L<http://lists.perl.org/list/ithreads.html> 1085 1086Stack size discussion: 1087L<http://www.perlmonks.org/?node_id=532956> 1088 1089=head1 AUTHOR 1090 1091Artur Bergman E<lt>sky AT crucially DOT netE<gt> 1092 1093CPAN version produced by Jerry D. Hedden <jdhedden AT cpan DOT org> 1094 1095=head1 LICENSE 1096 1097threads is released under the same license as Perl. 1098 1099=head1 ACKNOWLEDGEMENTS 1100 1101Richard Soderberg E<lt>perl AT crystalflame DOT netE<gt> - 1102Helping me out tons, trying to find reasons for races and other weird bugs! 1103 1104Simon Cozens E<lt>simon AT brecon DOT co DOT ukE<gt> - 1105Being there to answer zillions of annoying questions 1106 1107Rocco Caputo E<lt>troc AT netrus DOT netE<gt> 1108 1109Vipul Ved Prakash E<lt>mail AT vipul DOT netE<gt> - 1110Helping with debugging 1111 1112Dean Arnold E<lt>darnold AT presicient DOT comE<gt> - 1113Stack size API 1114 1115=cut 1116