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