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