8 our $VERSION = '1.24_01';
9 my $XS_VERSION = $VERSION;
10 $VERSION = eval $VERSION;
14 # Verify this Perl supports threads
16 if (! $Config{useithreads}) {
17 die("This Perl not built to support threads\n");
20 # Declare that we have been loaded
21 $threads::threads = 1;
23 # Complain if 'threads' is loaded after 'threads::shared'
24 if ($threads::shared::threads_shared) {
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.
35 XSLoader::load('threads', $XS_VERSION);
42 my $class = shift; # Not used
44 # Exported subroutines
45 my @EXPORT = qw(async);
48 while (my $sym = shift) {
50 push(@EXPORT, qw(yield));
57 # Export subroutine names
58 my $caller = caller();
59 foreach my $sym (@EXPORT) {
61 *{$caller.'::'.$sym} = \&{$sym};
68 # 'new' is an alias for 'create'
71 # 'async' is a function alias for the 'threads->create()' method
74 unshift(@_, 'threads');
75 # Use "goto" trick to avoid pad problems from 5.8.1 (fixed in 5.8.2)
79 # Thread object equality checking
82 '!=' => sub { ! equal(@_) },
92 threads - Perl interpreter-based threads
96 This document describes threads version 1.24
100 use threads ('yield');
104 print "Thread started: @args\n";
106 my $thread = threads->create('start_thread', 'argument');
109 threads->create(sub { print("I am a thread\n"); })->join();
111 my $thread3 = async { foreach (@files) { ... } };
114 # Invoke thread in list context so it can return a list
115 my ($thr) = threads->create(sub { return (qw/a b c/); });
116 my @results = $thr->join();
120 $thread = threads->self();
121 $thread = threads->object($tid);
123 $tid = threads->tid();
124 $tid = threads->self->tid();
125 $tid = $thread->tid();
130 my @threads = threads->list();
131 my $thread_count = threads->list();
133 if ($thr1 == $thr2) {
139 Perl 5.6 introduced something called interpreter threads. Interpreter
140 threads are different from "5005threads" (the thread model of Perl
141 5.005) by creating a new perl interpreter per thread and not sharing
142 any data or state between threads by default.
144 Prior to perl 5.8 this has only been available to people embedding
145 perl and for emulating fork() on windows.
147 The threads API is loosely based on the old Thread.pm API. It is very
148 important to note that variables are not shared between threads, all
149 variables are per default thread local. To use shared variables one
150 must use threads::shared.
152 It is also important to note that you must enable threads by doing
153 C<use threads> as early as possible in the script itself and that it
154 is not possible to enable threading inside an C<eval "">, C<do>,
155 C<require>, or C<use>. In particular, if you are intending to share
156 variables with threads::shared, you must C<use threads> before you
157 C<use threads::shared> and C<threads> will emit a warning if you do
158 it the other way around.
162 =item $thr = threads->create(FUNCTION, ARGS)
164 This will create a new thread that will begin execution with the specified
165 entry point function, and give it the I<ARGS> list as parameters. It will
166 return the corresponding threads object, or C<undef> if thread creation failed.
168 I<FUNCTION> may either be the name of a function, an anonymous subroutine, or
171 my $thr = threads->create('func_name', ...);
173 my $thr = threads->create(sub { ... }, ...);
175 my $thr = threads->create(\&func, ...);
177 The thread may be created in I<list> context, or I<scalar> context as follows:
179 # Create thread in list context
180 my ($thr) = threads->create(...);
182 # Create thread in scalar context
183 my $thr = threads->create(...);
185 This has consequences for the C<-E<gt>join()> method describe below.
187 Although a thread may be created in I<void> context, to do so you must
188 I<chain> either the C<-E<gt>join()> or C<-E<gt>detach()> method to the
189 C<-E<gt>create()> call:
191 threads->create(...)->join();
193 The C<-E<gt>new()> method is an alias for C<-E<gt>create()>.
197 This will wait for the corresponding thread to complete its execution. When
198 the thread finishes, C<-E<gt>join()> will return the return value(s) of the
199 entry point function.
201 The context (void, scalar or list) of the thread creation is also the
202 context for C<-E<gt>join()>. This means that if you intend to return an array
203 from a thread, you must use C<my ($thr) = threads->create(...)>, and that
204 if you intend to return a scalar, you must use C<my $thr = ...>:
206 # Create thread in list context
207 my ($thr1) = threads->create(sub {
208 my @results = qw(a b c);
211 # Retrieve list results from thread
212 my @res1 = $thr1->join();
214 # Create thread in scalar context
215 my $thr2 = threads->create(sub {
219 # Retrieve scalar result from thread
220 my $res2 = $thr2->join();
222 If the program exits without all other threads having been either joined or
223 detached, then a warning will be issued. (A program exits either because one
224 of its threads explicitly calls L<exit()|perlfunc/"exit EXPR">, or in the case
225 of the main thread, reaches the end of the main program file.)
227 Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already joined thread will
228 cause an error to be thrown.
232 Makes the thread unjoinable, and causes any eventual return value to be
235 Calling C<-E<gt>join()> or C<-E<gt>detach()> on an already detached thread
236 will cause an error to be thrown.
238 =item threads->detach()
240 Class method that allows a thread to detach itself.
242 =item threads->self()
244 Class method that allows a thread to obtain its own I<threads> object.
248 Returns the ID of the thread. Thread IDs are unique integers with the main
249 thread in a program being 0, and incrementing by 1 for every thread created.
253 Class method that allows a thread to obtain its own ID.
255 =item threads->object($tid)
257 This will return the I<threads> object for the I<active> thread associated
258 with the specified thread ID. Returns C<undef> if there is no thread
259 associated with the TID, if the thread is joined or detached, if no TID is
260 specified or if the specified TID is undef.
262 =item threads->yield()
264 This is a suggestion to the OS to let this thread yield CPU time to other
265 threads. What actually happens is highly dependent upon the underlying
266 thread implementation.
268 You may do C<use threads qw(yield)>, and then just use C<yield()> in your
271 =item threads->list()
273 In a list context, returns a list of all non-joined, non-detached I<threads>
274 objects. In a scalar context, returns a count of the same.
276 =item $thr1->equal($thr2)
278 Tests if two threads objects are the same thread or not. This is overloaded
279 to the more natural forms:
281 if ($thr1 == $thr2) {
282 print("Threads are the same\n");
285 if ($thr1 != $thr2) {
286 print("Threads differ\n");
289 (Thread comparison is based on thread IDs.)
293 C<async> creates a thread to execute the block immediately following
294 it. This block is treated as an anonymous subroutine, and so must have a
295 semi-colon after the closing brace. Like C<threads->create()>, C<async>
296 returns a I<threads> object.
298 =item $thr->_handle()
300 This I<private> method returns the memory location of the internal thread
301 structure associated with a threads object. For Win32, this is a pointer to
302 the C<HANDLE> value returned by C<CreateThread> (i.e., C<HANDLE *>); for other
303 platforms, it is a pointer to the C<pthread_t> structure used in the
304 C<pthread_create> call (i.e., C<pthread_t *>.
306 This method is of no use for general Perl threads programming. Its intent is
307 to provide other (XS-based) thread modules with the capability to access, and
308 possibly manipulate, the underlying thread structure associated with a Perl
311 =item threads->_handle()
313 Class method that allows a thread to obtain its own I<handle>.
321 =item A thread exited while # other threads were still running
323 A thread (not necessarily the main thread) exited while there were
324 still other threads running. Usually it's a good idea to first collect
325 the return values of the created threads by joining them, and only then
326 exit from the main thread.
334 =item This Perl not built to support threads
336 The particular copy of Perl that you're trying to use was not built using the
337 C<useithreads> configuration option.
339 Having threads support requires all of Perl and all of the XS modules in the
340 Perl installation to be rebuilt; it is not just a question of adding the
341 L<threads> module (i.e., threaded and non-threaded Perls are binary
350 =item Parent-child threads
352 On some platforms, it might not be possible to destroy I<parent> threads while
353 there are still existing I<child> threads.
355 =item Creating threads inside BEGIN blocks
357 Creating threads inside BEGIN blocks (or during the compilation phase
358 in general) does not work. (In Windows, trying to use fork() inside
359 BEGIN blocks is an equally losing proposition, since it has been
360 implemented in very much the same way as threads.)
362 =item PERL_OLD_SIGNALS are not threadsafe, will not be.
364 If your Perl has been built with PERL_OLD_SIGNALS (one has
365 to explicitly add that symbol to ccflags, see C<perl -V>),
366 signal handling is not threadsafe.
368 =item Returning closures from threads
370 Returning a closure from a thread does not work, usually crashing Perl in the
373 =item Perl Bugs and the CPAN Version of L<threads>
375 Support for threads extents beyond the code in this module (i.e.,
376 F<threads.pm> and F<threads.xs>), and into the Perl iterpreter itself. Older
377 versions of Perl contain bugs that may manifest themselves despite using the
378 latest version of L<threads> from CPAN. There is no workaround for this other
379 than upgrading to the lastest version of Perl.
381 (Before you consider posting a bug report, please consult, and possibly post a
382 message to the discussion forum to see if what you've encountered is a known
393 L<threads> Discussion Forum on CPAN:
394 L<http://www.cpanforum.com/dist/threads>
396 Annotated POD for L<threads>:
397 L<http://annocpan.org/~JDHEDDEN/threads-1.24/shared.pm>
399 L<threads::shared>, L<perlthrtut>
401 L<http://www.perl.com/pub/a/2002/06/11/threads.html> and
402 L<http://www.perl.com/pub/a/2002/09/04/threads.html>
404 Perl threads mailing list:
405 L<http://lists.cpan.org/showlist.cgi?name=iThreads>
409 Artur Bergman E<lt>sky AT crucially DOT netE<gt>
411 threads is released under the same license as Perl.
413 CPAN version produced by Jerry D. Hedden <jdhedden AT cpan DOT org>
415 =head1 ACKNOWLEDGEMENTS
417 Richard Soderberg E<lt>perl AT crystalflame DOT netE<gt> -
418 Helping me out tons, trying to find reasons for races and other weird bugs!
420 Simon Cozens E<lt>simon AT brecon DOT co DOT ukE<gt> -
421 Being there to answer zillions of annoying questions
423 Rocco Caputo E<lt>troc AT netrus DOT netE<gt>
425 Vipul Ved Prakash E<lt>mail AT vipul DOT netE<gt> -
426 Helping with debugging