Retract the cond.t part of #16249 since the nature
[p5sagit/p5-mst-13.2.git] / ext / threads / threads.pm
CommitLineData
47ba8780 1package threads;
2
73e09c8f 3use 5.007_003;
47ba8780 4use strict;
5use warnings;
73e09c8f 6use Config;
7
8BEGIN {
9 unless ($Config{useithreads}) {
10 my @caller = caller(2);
11 die <<EOF;
12$caller[1] line $caller[2]:
13
14This Perl hasn't been configured and built properly for the threads
15module to work. (The 'useithreads' configuration option hasn't been used.)
16
17Having threads support requires all of Perl and all of the modules in
18the Perl installation to be rebuilt, it is not just a question of adding
19the threads module. (In other words, threaded and non-threaded Perls
20are binary incompatible.)
21
22If you want to the use the threads module, please contact the people
23who built your Perl.
24
25Cannot continue, aborting.
26EOF
27 }
28}
47ba8780 29
68795e93 30use overload
43d3ddbe 31 '==' => \&equal,
47ba8780 32 'fallback' => 1;
33
47ba8780 34#use threads::Shared;
35
dab065ea 36BEGIN {
37 warn "Warning, threads::shared has already been loaded. ".
38 "To enable shared variables for these modules 'use threads' ".
39 "must be called before any of those modules are loaded\n"
40 if($threads::shared::threads_shared);
41}
42
47ba8780 43require Exporter;
44require DynaLoader;
45
47ba8780 46our @ISA = qw(Exporter DynaLoader);
47
48our %EXPORT_TAGS = ( all => [qw()]);
49
50our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
51
52our @EXPORT = qw(
53
54);
678a9b6c 55our $VERSION = '0.99';
47ba8780 56
47ba8780 57
43d3ddbe 58sub equal {
47ba8780 59 return 1 if($_[0]->tid() == $_[1]->tid());
60 return 0;
61}
62
8222d950 63$threads::threads = 1;
47ba8780 64
65bootstrap threads $VERSION;
66
68795e93 67# why document 'new' then use 'create' in the tests!
68*create = \&new;
69
47ba8780 70# Preloaded methods go here.
71
721;
73__END__
74
75=head1 NAME
76
77threads - Perl extension allowing use of interpreter based threads from perl
78
79=head1 SYNOPSIS
80
47ba8780 81use threads;
82
83sub start_thread {
84 print "Thread started\n";
85}
86
9c4972d9 87my $thread = threads->create("start_thread","argument");
47ba8780 88
9c4972d9 89$thread->create(sub { print "I am a thread"},"argument");
47ba8780 90
91$thread->join();
92
93$thread->detach();
94
95$thread = threads->self();
96
11c51ed3 97threads->tid();
98threads->self->tid();
99
100$thread->tid();
47ba8780 101
f9dff5f5 102threads->yield();
103
678a9b6c 104threads->list();
105
47ba8780 106=head1 DESCRIPTION
107
43d3ddbe 108Perl 5.6 introduced something called interpreter threads. Interpreter
109threads are different from "5005threads" (the thread model of Perl
1105.005) by creating a new perl interpreter per thread and not sharing
111any data or state between threads.
11c51ed3 112
43d3ddbe 113Prior to perl 5.8 this has only been available to people embedding
114perl and for emulating fork() on windows.
11c51ed3 115
43d3ddbe 116The threads API is loosely based on the old Thread.pm API. It is very
117important to note that variables are not shared between threads, all
118variables are per default thread local. To use shared variables one
119must use threads::shared.
11c51ed3 120
43d3ddbe 121It is also important to note that you preferably enable threads by
122doing C<use threads> as early as possible and that it is not possible
dab065ea 123to enable threading inside an eval ""; In particular, if you are
124intending to share variables with threads::shared, you must
125C<use threads> before you C<use threads::shared> and threads will emit
126a warning if you do it the other way around.
47ba8780 127
128=over
129
9c4972d9 130=item $thread = threads->create(function, LIST)
47ba8780 131
ad91d581 132This will create a new thread with the entry point function and give
133it LIST as parameters. It will return the corresponding threads
134object.
47ba8780 135
11c51ed3 136=item $thread->join
47ba8780 137
43d3ddbe 138This will wait for the corresponding thread to join. When it finishes
139join will return the return values of the entry point function. If a
678a9b6c 140thread has been detached, an error will be thrown..
47ba8780 141
11c51ed3 142=item $thread->detach
47ba8780 143
43d3ddbe 144Will throw away the return value from the thread and make it
145non-joinable.
47ba8780 146
147=item threads->self
148
149This will return the object for the current thread.
150
11c51ed3 151=item $thread->tid
47ba8780 152
678a9b6c 153This will return the id of the thread. threads->tid() is a quick way
154to get current thread id if you don't have your thread handy.
47ba8780 155
f9dff5f5 156=item threads->yield();
157
158This will tell the OS to let this thread yield CPU time to other threads.
159However this is highly depending on the underlying thread implmentation.
160
678a9b6c 161=item threads->list();
162
163This will return a list of all non joined, non detached threads.
164
47ba8780 165=back
166
e4f9f4fe 167=head1 WARNINGS
168
169=over 4
170
171=item Cleanup skipped %d active threads
172
173The main thread exited while there were still other threads running.
4f5d0762 174This is not a good sign: you should either explicitly join the threads,
175or somehow be certain that all the non-main threads have finished.
e4f9f4fe 176
177=back
47ba8780 178
678a9b6c 179=head1 BUGS / TODO
180
181The current implmentation of threads has been an attempt to get
182a correct threading system working that could be built on,
183and optimized, in newer versions of perl.
184
185Current the overhead of creating a thread is rather large,
186also the cost of returning values can be large. These are areas
187were there most likely will be work done to optimize what data
188that needs to be cloned.
47ba8780 189
190=over
191
678a9b6c 192=item Parent-Child threads.
193
194On some platforms it might not be possible to destroy "parent"
195threads while there are still existing child "threads".
196
197This will be possibly be fixed in later versions of perl.
198
199=item tid is I32
200
201The tid is a 32 bit integer, it can potentially overflow.
202This might be fixed in a later version of perl.
47ba8780 203
678a9b6c 204=item Returning objects
47ba8780 205
678a9b6c 206When you return an object the entire stash that the object is blessed
207as well. This will lead to a large memory usage.
208The ideal situation would be to detect the original stash if it existed.
209
210=item PERL_OLD_SIGNALS are not threadsafe, will not be.
47ba8780 211
212=back
213
214=head1 AUTHOR and COPYRIGHT
215
11c51ed3 216Arthur Bergman E<lt>arthur at contiller.seE<gt>
47ba8780 217
43d3ddbe 218threads is released under the same license as Perl.
47ba8780 219
68795e93 220Thanks to
47ba8780 221
68795e93 222Richard Soderberg E<lt>rs at crystalflame.netE<gt>
ad91d581 223Helping me out tons, trying to find reasons for races and other weird bugs!
47ba8780 224
ad91d581 225Simon Cozens E<lt>simon at brecon.co.ukE<gt>
226Being there to answer zillions of annoying questions
47ba8780 227
ad91d581 228Rocco Caputo E<lt>troc at netrus.netE<gt>
47ba8780 229
ad91d581 230Vipul Ved Prakash E<lt>mail at vipul.netE<gt>
47ba8780 231Helping with debugging.
232
233please join perl-ithreads@perl.org for more information
234
b5807cdb 235
11c51ed3 236
47ba8780 237
238=head1 SEE ALSO
239
11c51ed3 240L<perl>, L<threads::shared>, L<perlcall>, L<perlembed>, L<perlguts>
47ba8780 241
242=cut