1PERLTHRTUT(1) Perl Programmers Reference Guide PERLTHRTUT(1)
2
3
4
6 perlthrtut - Tutorial on threads in Perl
7
9 This tutorial describes the use of Perl interpreter threads (sometimes
10 referred to as ithreads). In this model, each thread runs in its own
11 Perl interpreter, and any data sharing between threads must be
12 explicit. The user-level interface for ithreads uses the threads
13 class.
14
15 NOTE: There was another older Perl threading flavor called the 5.005
16 model that used the threads class. This old model was known to have
17 problems, is deprecated, and was removed for release 5.10. You are
18 strongly encouraged to migrate any existing 5.005 threads code to the
19 new model as soon as possible.
20
21 You can see which (or neither) threading flavour you have by running
22 "perl -V" and looking at the "Platform" section. If you have
23 "useithreads=define" you have ithreads, if you have
24 "use5005threads=define" you have 5.005 threads. If you have neither,
25 you don't have any thread support built in. If you have both, you are
26 in trouble.
27
28 The threads and threads::shared modules are included in the core Perl
29 distribution. Additionally, they are maintained as a separate modules
30 on CPAN, so you can check there for any updates.
31
33 A thread is a flow of control through a program with a single execution
34 point.
35
36 Sounds an awful lot like a process, doesn't it? Well, it should.
37 Threads are one of the pieces of a process. Every process has at least
38 one thread and, up until now, every process running Perl had only one
39 thread. With 5.8, though, you can create extra threads. We're going
40 to show you how, when, and why.
41
43 There are three basic ways that you can structure a threaded program.
44 Which model you choose depends on what you need your program to do.
45 For many non-trivial threaded programs, you'll need to choose different
46 models for different pieces of your program.
47
48 Boss/Worker
49 The boss/worker model usually has one boss thread and one or more
50 worker threads. The boss thread gathers or generates tasks that need
51 to be done, then parcels those tasks out to the appropriate worker
52 thread.
53
54 This model is common in GUI and server programs, where a main thread
55 waits for some event and then passes that event to the appropriate
56 worker threads for processing. Once the event has been passed on, the
57 boss thread goes back to waiting for another event.
58
59 The boss thread does relatively little work. While tasks aren't
60 necessarily performed faster than with any other method, it tends to
61 have the best user-response times.
62
63 Work Crew
64 In the work crew model, several threads are created that do essentially
65 the same thing to different pieces of data. It closely mirrors
66 classical parallel processing and vector processors, where a large
67 array of processors do the exact same thing to many pieces of data.
68
69 This model is particularly useful if the system running the program
70 will distribute multiple threads across different processors. It can
71 also be useful in ray tracing or rendering engines, where the
72 individual threads can pass on interim results to give the user visual
73 feedback.
74
75 Pipeline
76 The pipeline model divides up a task into a series of steps, and passes
77 the results of one step on to the thread processing the next. Each
78 thread does one thing to each piece of data and passes the results to
79 the next thread in line.
80
81 This model makes the most sense if you have multiple processors so two
82 or more threads will be executing in parallel, though it can often make
83 sense in other contexts as well. It tends to keep the individual tasks
84 small and simple, as well as allowing some parts of the pipeline to
85 block (on I/O or system calls, for example) while other parts keep
86 going. If you're running different parts of the pipeline on different
87 processors you may also take advantage of the caches on each processor.
88
89 This model is also handy for a form of recursive programming where,
90 rather than having a subroutine call itself, it instead creates another
91 thread. Prime and Fibonacci generators both map well to this form of
92 the pipeline model. (A version of a prime number generator is presented
93 later on.)
94
96 If you have experience with other thread implementations, you might
97 find that things aren't quite what you expect. It's very important to
98 remember when dealing with Perl threads that Perl Threads Are Not X
99 Threads for all values of X. They aren't POSIX threads, or DecThreads,
100 or Java's Green threads, or Win32 threads. There are similarities, and
101 the broad concepts are the same, but if you start looking for
102 implementation details you're going to be either disappointed or
103 confused. Possibly both.
104
105 This is not to say that Perl threads are completely different from
106 everything that's ever come before. They're not. Perl's threading
107 model owes a lot to other thread models, especially POSIX. Just as
108 Perl is not C, though, Perl threads are not POSIX threads. So if you
109 find yourself looking for mutexes, or thread priorities, it's time to
110 step back a bit and think about what you want to do and how Perl can do
111 it.
112
113 However, it is important to remember that Perl threads cannot magically
114 do things unless your operating system's threads allow it. So if your
115 system blocks the entire process on "sleep()", Perl usually will, as
116 well.
117
118 Perl Threads Are Different.
119
121 The addition of threads has changed Perl's internals substantially.
122 There are implications for people who write modules with XS code or
123 external libraries. However, since Perl data is not shared among
124 threads by default, Perl modules stand a high chance of being thread-
125 safe or can be made thread-safe easily. Modules that are not tagged as
126 thread-safe should be tested or code reviewed before being used in
127 production code.
128
129 Not all modules that you might use are thread-safe, and you should
130 always assume a module is unsafe unless the documentation says
131 otherwise. This includes modules that are distributed as part of the
132 core. Threads are a relatively new feature, and even some of the
133 standard modules aren't thread-safe.
134
135 Even if a module is thread-safe, it doesn't mean that the module is
136 optimized to work well with threads. A module could possibly be
137 rewritten to utilize the new features in threaded Perl to increase
138 performance in a threaded environment.
139
140 If you're using a module that's not thread-safe for some reason, you
141 can protect yourself by using it from one, and only one thread at all.
142 If you need multiple threads to access such a module, you can use
143 semaphores and lots of programming discipline to control access to it.
144 Semaphores are covered in "Basic semaphores".
145
146 See also "Thread-Safety of System Libraries".
147
149 The threads module provides the basic functions you need to write
150 threaded programs. In the following sections, we'll cover the basics,
151 showing you what you need to do to create a threaded program. After
152 that, we'll go over some of the features of the threads module that
153 make threaded programming easier.
154
155 Basic Thread Support
156 Thread support is a Perl compile-time option. It's something that's
157 turned on or off when Perl is built at your site, rather than when your
158 programs are compiled. If your Perl wasn't compiled with thread support
159 enabled, then any attempt to use threads will fail.
160
161 Your programs can use the Config module to check whether threads are
162 enabled. If your program can't run without them, you can say something
163 like:
164
165 use Config;
166 $Config{useithreads} or
167 die('Recompile Perl with threads to run this program.');
168
169 A possibly-threaded program using a possibly-threaded module might have
170 code like this:
171
172 use Config;
173 use MyMod;
174
175 BEGIN {
176 if ($Config{useithreads}) {
177 # We have threads
178 require MyMod_threaded;
179 import MyMod_threaded;
180 } else {
181 require MyMod_unthreaded;
182 import MyMod_unthreaded;
183 }
184 }
185
186 Since code that runs both with and without threads is usually pretty
187 messy, it's best to isolate the thread-specific code in its own module.
188 In our example above, that's what "MyMod_threaded" is, and it's only
189 imported if we're running on a threaded Perl.
190
191 A Note about the Examples
192 In a real situation, care should be taken that all threads are finished
193 executing before the program exits. That care has not been taken in
194 these examples in the interest of simplicity. Running these examples
195 as is will produce error messages, usually caused by the fact that
196 there are still threads running when the program exits. You should not
197 be alarmed by this.
198
199 Creating Threads
200 The threads module provides the tools you need to create new threads.
201 Like any other module, you need to tell Perl that you want to use it;
202 "use threads;" imports all the pieces you need to create basic threads.
203
204 The simplest, most straightforward way to create a thread is with
205 "create()":
206
207 use threads;
208
209 my $thr = threads->create(\&sub1);
210
211 sub sub1 {
212 print("In the thread\n");
213 }
214
215 The "create()" method takes a reference to a subroutine and creates a
216 new thread that starts executing in the referenced subroutine. Control
217 then passes both to the subroutine and the caller.
218
219 If you need to, your program can pass parameters to the subroutine as
220 part of the thread startup. Just include the list of parameters as
221 part of the "threads->create()" call, like this:
222
223 use threads;
224
225 my $Param3 = 'foo';
226 my $thr1 = threads->create(\&sub1, 'Param 1', 'Param 2', $Param3);
227 my @ParamList = (42, 'Hello', 3.14);
228 my $thr2 = threads->create(\&sub1, @ParamList);
229 my $thr3 = threads->create(\&sub1, qw(Param1 Param2 Param3));
230
231 sub sub1 {
232 my @InboundParameters = @_;
233 print("In the thread\n");
234 print('Got parameters >', join('<>',@InboundParameters), "<\n");
235 }
236
237 The last example illustrates another feature of threads. You can spawn
238 off several threads using the same subroutine. Each thread executes
239 the same subroutine, but in a separate thread with a separate
240 environment and potentially separate arguments.
241
242 "new()" is a synonym for "create()".
243
244 Waiting For A Thread To Exit
245 Since threads are also subroutines, they can return values. To wait
246 for a thread to exit and extract any values it might return, you can
247 use the "join()" method:
248
249 use threads;
250
251 my ($thr) = threads->create(\&sub1);
252
253 my @ReturnData = $thr->join();
254 print('Thread returned ', join(', ', @ReturnData), "\n");
255
256 sub sub1 { return ('Fifty-six', 'foo', 2); }
257
258 In the example above, the "join()" method returns as soon as the thread
259 ends. In addition to waiting for a thread to finish and gathering up
260 any values that the thread might have returned, "join()" also performs
261 any OS cleanup necessary for the thread. That cleanup might be
262 important, especially for long-running programs that spawn lots of
263 threads. If you don't want the return values and don't want to wait
264 for the thread to finish, you should call the "detach()" method
265 instead, as described next.
266
267 NOTE: In the example above, the thread returns a list, thus
268 necessitating that the thread creation call be made in list context
269 (i.e., "my ($thr)"). See "$thr->join()" in threads and "THREAD
270 CONTEXT" in threads for more details on thread context and return
271 values.
272
273 Ignoring A Thread
274 "join()" does three things: it waits for a thread to exit, cleans up
275 after it, and returns any data the thread may have produced. But what
276 if you're not interested in the thread's return values, and you don't
277 really care when the thread finishes? All you want is for the thread to
278 get cleaned up after when it's done.
279
280 In this case, you use the "detach()" method. Once a thread is
281 detached, it'll run until it's finished; then Perl will clean up after
282 it automatically.
283
284 use threads;
285
286 my $thr = threads->create(\&sub1); # Spawn the thread
287
288 $thr->detach(); # Now we officially don't care any more
289
290 sleep(15); # Let thread run for awhile
291
292 sub sub1 {
293 my $count = 0;
294 while (1) {
295 $count++;
296 print("\$count is $count\n");
297 sleep(1);
298 }
299 }
300
301 Once a thread is detached, it may not be joined, and any return data
302 that it might have produced (if it was done and waiting for a join) is
303 lost.
304
305 "detach()" can also be called as a class method to allow a thread to
306 detach itself:
307
308 use threads;
309
310 my $thr = threads->create(\&sub1);
311
312 sub sub1 {
313 threads->detach();
314 # Do more work
315 }
316
317 Process and Thread Termination
318 With threads one must be careful to make sure they all have a chance to
319 run to completion, assuming that is what you want.
320
321 An action that terminates a process will terminate all running threads.
322 die() and exit() have this property, and perl does an exit when the
323 main thread exits, perhaps implicitly by falling off the end of your
324 code, even if that's not what you want.
325
326 As an example of this case, this code prints the message "Perl exited
327 with active threads: 2 running and unjoined":
328
329 use threads;
330 my $thr1 = threads->new(\&thrsub, "test1");
331 my $thr2 = threads->new(\&thrsub, "test2");
332 sub thrsub {
333 my ($message) = @_;
334 sleep 1;
335 print "thread $message\n";
336 }
337
338 But when the following lines are added at the end:
339
340 $thr1->join();
341 $thr2->join();
342
343 it prints two lines of output, a perhaps more useful outcome.
344
346 Now that we've covered the basics of threads, it's time for our next
347 topic: Data. Threading introduces a couple of complications to data
348 access that non-threaded programs never need to worry about.
349
350 Shared And Unshared Data
351 The biggest difference between Perl ithreads and the old 5.005 style
352 threading, or for that matter, to most other threading systems out
353 there, is that by default, no data is shared. When a new Perl thread is
354 created, all the data associated with the current thread is copied to
355 the new thread, and is subsequently private to that new thread! This
356 is similar in feel to what happens when a Unix process forks, except
357 that in this case, the data is just copied to a different part of
358 memory within the same process rather than a real fork taking place.
359
360 To make use of threading, however, one usually wants the threads to
361 share at least some data between themselves. This is done with the
362 threads::shared module and the ":shared" attribute:
363
364 use threads;
365 use threads::shared;
366
367 my $foo :shared = 1;
368 my $bar = 1;
369 threads->create(sub { $foo++; $bar++; })->join();
370
371 print("$foo\n"); # Prints 2 since $foo is shared
372 print("$bar\n"); # Prints 1 since $bar is not shared
373
374 In the case of a shared array, all the array's elements are shared, and
375 for a shared hash, all the keys and values are shared. This places
376 restrictions on what may be assigned to shared array and hash elements:
377 only simple values or references to shared variables are allowed - this
378 is so that a private variable can't accidentally become shared. A bad
379 assignment will cause the thread to die. For example:
380
381 use threads;
382 use threads::shared;
383
384 my $var = 1;
385 my $svar :shared = 2;
386 my %hash :shared;
387
388 ... create some threads ...
389
390 $hash{a} = 1; # All threads see exists($hash{a})
391 # and $hash{a} == 1
392 $hash{a} = $var; # okay - copy-by-value: same effect as previous
393 $hash{a} = $svar; # okay - copy-by-value: same effect as previous
394 $hash{a} = \$svar; # okay - a reference to a shared variable
395 $hash{a} = \$var; # This will die
396 delete($hash{a}); # okay - all threads will see !exists($hash{a})
397
398 Note that a shared variable guarantees that if two or more threads try
399 to modify it at the same time, the internal state of the variable will
400 not become corrupted. However, there are no guarantees beyond this, as
401 explained in the next section.
402
403 Thread Pitfalls: Races
404 While threads bring a new set of useful tools, they also bring a number
405 of pitfalls. One pitfall is the race condition:
406
407 use threads;
408 use threads::shared;
409
410 my $x :shared = 1;
411 my $thr1 = threads->create(\&sub1);
412 my $thr2 = threads->create(\&sub2);
413
414 $thr1->join();
415 $thr2->join();
416 print("$x\n");
417
418 sub sub1 { my $foo = $x; $x = $foo + 1; }
419 sub sub2 { my $bar = $x; $x = $bar + 1; }
420
421 What do you think $x will be? The answer, unfortunately, is it depends.
422 Both "sub1()" and "sub2()" access the global variable $x, once to read
423 and once to write. Depending on factors ranging from your thread
424 implementation's scheduling algorithm to the phase of the moon, $x can
425 be 2 or 3.
426
427 Race conditions are caused by unsynchronized access to shared data.
428 Without explicit synchronization, there's no way to be sure that
429 nothing has happened to the shared data between the time you access it
430 and the time you update it. Even this simple code fragment has the
431 possibility of error:
432
433 use threads;
434 my $x :shared = 2;
435 my $y :shared;
436 my $z :shared;
437 my $thr1 = threads->create(sub { $y = $x; $x = $y + 1; });
438 my $thr2 = threads->create(sub { $z = $x; $x = $z + 1; });
439 $thr1->join();
440 $thr2->join();
441
442 Two threads both access $x. Each thread can potentially be interrupted
443 at any point, or be executed in any order. At the end, $x could be 3
444 or 4, and both $y and $z could be 2 or 3.
445
446 Even "$x += 5" or "$x++" are not guaranteed to be atomic.
447
448 Whenever your program accesses data or resources that can be accessed
449 by other threads, you must take steps to coordinate access or risk data
450 inconsistency and race conditions. Note that Perl will protect its
451 internals from your race conditions, but it won't protect you from you.
452
454 Perl provides a number of mechanisms to coordinate the interactions
455 between themselves and their data, to avoid race conditions and the
456 like. Some of these are designed to resemble the common techniques
457 used in thread libraries such as "pthreads"; others are Perl-specific.
458 Often, the standard techniques are clumsy and difficult to get right
459 (such as condition waits). Where possible, it is usually easier to use
460 Perlish techniques such as queues, which remove some of the hard work
461 involved.
462
463 Controlling access: lock()
464 The "lock()" function takes a shared variable and puts a lock on it.
465 No other thread may lock the variable until the variable is unlocked by
466 the thread holding the lock. Unlocking happens automatically when the
467 locking thread exits the block that contains the call to the "lock()"
468 function. Using "lock()" is straightforward: This example has several
469 threads doing some calculations in parallel, and occasionally updating
470 a running total:
471
472 use threads;
473 use threads::shared;
474
475 my $total :shared = 0;
476
477 sub calc {
478 while (1) {
479 my $result;
480 # (... do some calculations and set $result ...)
481 {
482 lock($total); # Block until we obtain the lock
483 $total += $result;
484 } # Lock implicitly released at end of scope
485 last if $result == 0;
486 }
487 }
488
489 my $thr1 = threads->create(\&calc);
490 my $thr2 = threads->create(\&calc);
491 my $thr3 = threads->create(\&calc);
492 $thr1->join();
493 $thr2->join();
494 $thr3->join();
495 print("total=$total\n");
496
497 "lock()" blocks the thread until the variable being locked is
498 available. When "lock()" returns, your thread can be sure that no
499 other thread can lock that variable until the block containing the lock
500 exits.
501
502 It's important to note that locks don't prevent access to the variable
503 in question, only lock attempts. This is in keeping with Perl's
504 longstanding tradition of courteous programming, and the advisory file
505 locking that "flock()" gives you.
506
507 You may lock arrays and hashes as well as scalars. Locking an array,
508 though, will not block subsequent locks on array elements, just lock
509 attempts on the array itself.
510
511 Locks are recursive, which means it's okay for a thread to lock a
512 variable more than once. The lock will last until the outermost
513 "lock()" on the variable goes out of scope. For example:
514
515 my $x :shared;
516 doit();
517
518 sub doit {
519 {
520 {
521 lock($x); # Wait for lock
522 lock($x); # NOOP - we already have the lock
523 {
524 lock($x); # NOOP
525 {
526 lock($x); # NOOP
527 lockit_some_more();
528 }
529 }
530 } # *** Implicit unlock here ***
531 }
532 }
533
534 sub lockit_some_more {
535 lock($x); # NOOP
536 } # Nothing happens here
537
538 Note that there is no "unlock()" function - the only way to unlock a
539 variable is to allow it to go out of scope.
540
541 A lock can either be used to guard the data contained within the
542 variable being locked, or it can be used to guard something else, like
543 a section of code. In this latter case, the variable in question does
544 not hold any useful data, and exists only for the purpose of being
545 locked. In this respect, the variable behaves like the mutexes and
546 basic semaphores of traditional thread libraries.
547
548 A Thread Pitfall: Deadlocks
549 Locks are a handy tool to synchronize access to data, and using them
550 properly is the key to safe shared data. Unfortunately, locks aren't
551 without their dangers, especially when multiple locks are involved.
552 Consider the following code:
553
554 use threads;
555
556 my $x :shared = 4;
557 my $y :shared = 'foo';
558 my $thr1 = threads->create(sub {
559 lock($x);
560 sleep(20);
561 lock($y);
562 });
563 my $thr2 = threads->create(sub {
564 lock($y);
565 sleep(20);
566 lock($x);
567 });
568
569 This program will probably hang until you kill it. The only way it
570 won't hang is if one of the two threads acquires both locks first. A
571 guaranteed-to-hang version is more complicated, but the principle is
572 the same.
573
574 The first thread will grab a lock on $x, then, after a pause during
575 which the second thread has probably had time to do some work, try to
576 grab a lock on $y. Meanwhile, the second thread grabs a lock on $y,
577 then later tries to grab a lock on $x. The second lock attempt for
578 both threads will block, each waiting for the other to release its
579 lock.
580
581 This condition is called a deadlock, and it occurs whenever two or more
582 threads are trying to get locks on resources that the others own. Each
583 thread will block, waiting for the other to release a lock on a
584 resource. That never happens, though, since the thread with the
585 resource is itself waiting for a lock to be released.
586
587 There are a number of ways to handle this sort of problem. The best
588 way is to always have all threads acquire locks in the exact same
589 order. If, for example, you lock variables $x, $y, and $z, always lock
590 $x before $y, and $y before $z. It's also best to hold on to locks for
591 as short a period of time to minimize the risks of deadlock.
592
593 The other synchronization primitives described below can suffer from
594 similar problems.
595
596 Queues: Passing Data Around
597 A queue is a special thread-safe object that lets you put data in one
598 end and take it out the other without having to worry about
599 synchronization issues. They're pretty straightforward, and look like
600 this:
601
602 use threads;
603 use Thread::Queue;
604
605 my $DataQueue = Thread::Queue->new();
606 my $thr = threads->create(sub {
607 while (my $DataElement = $DataQueue->dequeue()) {
608 print("Popped $DataElement off the queue\n");
609 }
610 });
611
612 $DataQueue->enqueue(12);
613 $DataQueue->enqueue("A", "B", "C");
614 sleep(10);
615 $DataQueue->enqueue(undef);
616 $thr->join();
617
618 You create the queue with "Thread::Queue->new()". Then you can add
619 lists of scalars onto the end with "enqueue()", and pop scalars off the
620 front of it with "dequeue()". A queue has no fixed size, and can grow
621 as needed to hold everything pushed on to it.
622
623 If a queue is empty, "dequeue()" blocks until another thread enqueues
624 something. This makes queues ideal for event loops and other
625 communications between threads.
626
627 Semaphores: Synchronizing Data Access
628 Semaphores are a kind of generic locking mechanism. In their most basic
629 form, they behave very much like lockable scalars, except that they
630 can't hold data, and that they must be explicitly unlocked. In their
631 advanced form, they act like a kind of counter, and can allow multiple
632 threads to have the lock at any one time.
633
634 Basic semaphores
635 Semaphores have two methods, "down()" and "up()": "down()" decrements
636 the resource count, while "up()" increments it. Calls to "down()" will
637 block if the semaphore's current count would decrement below zero.
638 This program gives a quick demonstration:
639
640 use threads;
641 use Thread::Semaphore;
642
643 my $semaphore = Thread::Semaphore->new();
644 my $GlobalVariable :shared = 0;
645
646 $thr1 = threads->create(\&sample_sub, 1);
647 $thr2 = threads->create(\&sample_sub, 2);
648 $thr3 = threads->create(\&sample_sub, 3);
649
650 sub sample_sub {
651 my $SubNumber = shift(@_);
652 my $TryCount = 10;
653 my $LocalCopy;
654 sleep(1);
655 while ($TryCount--) {
656 $semaphore->down();
657 $LocalCopy = $GlobalVariable;
658 print("$TryCount tries left for sub $SubNumber "
659 ."(\$GlobalVariable is $GlobalVariable)\n");
660 sleep(2);
661 $LocalCopy++;
662 $GlobalVariable = $LocalCopy;
663 $semaphore->up();
664 }
665 }
666
667 $thr1->join();
668 $thr2->join();
669 $thr3->join();
670
671 The three invocations of the subroutine all operate in sync. The
672 semaphore, though, makes sure that only one thread is accessing the
673 global variable at once.
674
675 Advanced Semaphores
676 By default, semaphores behave like locks, letting only one thread
677 "down()" them at a time. However, there are other uses for semaphores.
678
679 Each semaphore has a counter attached to it. By default, semaphores are
680 created with the counter set to one, "down()" decrements the counter by
681 one, and "up()" increments by one. However, we can override any or all
682 of these defaults simply by passing in different values:
683
684 use threads;
685 use Thread::Semaphore;
686
687 my $semaphore = Thread::Semaphore->new(5);
688 # Creates a semaphore with the counter set to five
689
690 my $thr1 = threads->create(\&sub1);
691 my $thr2 = threads->create(\&sub1);
692
693 sub sub1 {
694 $semaphore->down(5); # Decrements the counter by five
695 # Do stuff here
696 $semaphore->up(5); # Increment the counter by five
697 }
698
699 $thr1->detach();
700 $thr2->detach();
701
702 If "down()" attempts to decrement the counter below zero, it blocks
703 until the counter is large enough. Note that while a semaphore can be
704 created with a starting count of zero, any "up()" or "down()" always
705 changes the counter by at least one, and so "$semaphore->down(0)" is
706 the same as "$semaphore->down(1)".
707
708 The question, of course, is why would you do something like this? Why
709 create a semaphore with a starting count that's not one, or why
710 decrement or increment it by more than one? The answer is resource
711 availability. Many resources that you want to manage access for can be
712 safely used by more than one thread at once.
713
714 For example, let's take a GUI driven program. It has a semaphore that
715 it uses to synchronize access to the display, so only one thread is
716 ever drawing at once. Handy, but of course you don't want any thread
717 to start drawing until things are properly set up. In this case, you
718 can create a semaphore with a counter set to zero, and up it when
719 things are ready for drawing.
720
721 Semaphores with counters greater than one are also useful for
722 establishing quotas. Say, for example, that you have a number of
723 threads that can do I/O at once. You don't want all the threads
724 reading or writing at once though, since that can potentially swamp
725 your I/O channels, or deplete your process's quota of filehandles. You
726 can use a semaphore initialized to the number of concurrent I/O
727 requests (or open files) that you want at any one time, and have your
728 threads quietly block and unblock themselves.
729
730 Larger increments or decrements are handy in those cases where a thread
731 needs to check out or return a number of resources at once.
732
733 Waiting for a Condition
734 The functions "cond_wait()" and "cond_signal()" can be used in
735 conjunction with locks to notify co-operating threads that a resource
736 has become available. They are very similar in use to the functions
737 found in "pthreads". However for most purposes, queues are simpler to
738 use and more intuitive. See threads::shared for more details.
739
740 Giving up control
741 There are times when you may find it useful to have a thread explicitly
742 give up the CPU to another thread. You may be doing something
743 processor-intensive and want to make sure that the user-interface
744 thread gets called frequently. Regardless, there are times that you
745 might want a thread to give up the processor.
746
747 Perl's threading package provides the "yield()" function that does
748 this. "yield()" is pretty straightforward, and works like this:
749
750 use threads;
751
752 sub loop {
753 my $thread = shift;
754 my $foo = 50;
755 while($foo--) { print("In thread $thread\n"); }
756 threads->yield();
757 $foo = 50;
758 while($foo--) { print("In thread $thread\n"); }
759 }
760
761 my $thr1 = threads->create(\&loop, 'first');
762 my $thr2 = threads->create(\&loop, 'second');
763 my $thr3 = threads->create(\&loop, 'third');
764
765 It is important to remember that "yield()" is only a hint to give up
766 the CPU, it depends on your hardware, OS and threading libraries what
767 actually happens. On many operating systems, yield() is a no-op.
768 Therefore it is important to note that one should not build the
769 scheduling of the threads around "yield()" calls. It might work on your
770 platform but it won't work on another platform.
771
773 We've covered the workhorse parts of Perl's threading package, and with
774 these tools you should be well on your way to writing threaded code and
775 packages. There are a few useful little pieces that didn't really fit
776 in anyplace else.
777
778 What Thread Am I In?
779 The "threads->self()" class method provides your program with a way to
780 get an object representing the thread it's currently in. You can use
781 this object in the same way as the ones returned from thread creation.
782
783 Thread IDs
784 "tid()" is a thread object method that returns the thread ID of the
785 thread the object represents. Thread IDs are integers, with the main
786 thread in a program being 0. Currently Perl assigns a unique TID to
787 every thread ever created in your program, assigning the first thread
788 to be created a TID of 1, and increasing the TID by 1 for each new
789 thread that's created. When used as a class method, "threads->tid()"
790 can be used by a thread to get its own TID.
791
792 Are These Threads The Same?
793 The "equal()" method takes two thread objects and returns true if the
794 objects represent the same thread, and false if they don't.
795
796 Thread objects also have an overloaded "==" comparison so that you can
797 do comparison on them as you would with normal objects.
798
799 What Threads Are Running?
800 "threads->list()" returns a list of thread objects, one for each thread
801 that's currently running and not detached. Handy for a number of
802 things, including cleaning up at the end of your program (from the main
803 Perl thread, of course):
804
805 # Loop through all the threads
806 foreach my $thr (threads->list()) {
807 $thr->join();
808 }
809
810 If some threads have not finished running when the main Perl thread
811 ends, Perl will warn you about it and die, since it is impossible for
812 Perl to clean up itself while other threads are running.
813
814 NOTE: The main Perl thread (thread 0) is in a detached state, and so
815 does not appear in the list returned by "threads->list()".
816
818 Confused yet? It's time for an example program to show some of the
819 things we've covered. This program finds prime numbers using threads.
820
821 1 #!/usr/bin/perl
822 2 # prime-pthread, courtesy of Tom Christiansen
823 3
824 4 use v5.36;
825 5
826 6 use threads;
827 7 use Thread::Queue;
828 8
829 9 sub check_num ($upstream, $cur_prime) {
830 10 my $kid;
831 11 my $downstream = Thread::Queue->new();
832 12 while (my $num = $upstream->dequeue()) {
833 13 next unless ($num % $cur_prime);
834 14 if ($kid) {
835 15 $downstream->enqueue($num);
836 16 } else {
837 17 print("Found prime: $num\n");
838 18 $kid = threads->create(\&check_num, $downstream, $num);
839 19 if (! $kid) {
840 20 warn("Sorry. Ran out of threads.\n");
841 21 last;
842 22 }
843 23 }
844 24 }
845 25 if ($kid) {
846 26 $downstream->enqueue(undef);
847 27 $kid->join();
848 28 }
849 29 }
850 30
851 31 my $stream = Thread::Queue->new(3..1000, undef);
852 32 check_num($stream, 2);
853
854 This program uses the pipeline model to generate prime numbers. Each
855 thread in the pipeline has an input queue that feeds numbers to be
856 checked, a prime number that it's responsible for, and an output queue
857 into which it funnels numbers that have failed the check. If the
858 thread has a number that's failed its check and there's no child
859 thread, then the thread must have found a new prime number. In that
860 case, a new child thread is created for that prime and stuck on the end
861 of the pipeline.
862
863 This probably sounds a bit more confusing than it really is, so let's
864 go through this program piece by piece and see what it does. (For
865 those of you who might be trying to remember exactly what a prime
866 number is, it's a number that's only evenly divisible by itself and 1.)
867
868 The bulk of the work is done by the "check_num()" subroutine, which
869 takes a reference to its input queue and a prime number that it's
870 responsible for. We create a new queue (line 11) and reserve a scalar
871 for the thread that we're likely to create later (line 10).
872
873 The while loop from line 12 to line 24 grabs a scalar off the input
874 queue and checks against the prime this thread is responsible for.
875 Line 13 checks to see if there's a remainder when we divide the number
876 to be checked by our prime. If there is one, the number must not be
877 evenly divisible by our prime, so we need to either pass it on to the
878 next thread if we've created one (line 15) or create a new thread if we
879 haven't.
880
881 The new thread creation is line 18. We pass on to it a reference to
882 the queue we've created, and the prime number we've found. In lines 19
883 through 22, we check to make sure that our new thread got created, and
884 if not, we stop checking any remaining numbers in the queue.
885
886 Finally, once the loop terminates (because we got a 0 or "undef" in the
887 queue, which serves as a note to terminate), we pass on the notice to
888 our child, and wait for it to exit if we've created a child (lines 25
889 and 28).
890
891 Meanwhile, back in the main thread, we first create a queue (line 31)
892 and queue up all the numbers from 3 to 1000 for checking, plus a
893 termination notice. Then all we have to do to get the ball rolling is
894 pass the queue and the first prime to the "check_num()" subroutine
895 (line 32).
896
897 That's how it works. It's pretty simple; as with many Perl programs,
898 the explanation is much longer than the program.
899
901 Some background on thread implementations from the operating system
902 viewpoint. There are three basic categories of threads: user-mode
903 threads, kernel threads, and multiprocessor kernel threads.
904
905 User-mode threads are threads that live entirely within a program and
906 its libraries. In this model, the OS knows nothing about threads. As
907 far as it's concerned, your process is just a process.
908
909 This is the easiest way to implement threads, and the way most OSes
910 start. The big disadvantage is that, since the OS knows nothing about
911 threads, if one thread blocks they all do. Typical blocking activities
912 include most system calls, most I/O, and things like "sleep()".
913
914 Kernel threads are the next step in thread evolution. The OS knows
915 about kernel threads, and makes allowances for them. The main
916 difference between a kernel thread and a user-mode thread is blocking.
917 With kernel threads, things that block a single thread don't block
918 other threads. This is not the case with user-mode threads, where the
919 kernel blocks at the process level and not the thread level.
920
921 This is a big step forward, and can give a threaded program quite a
922 performance boost over non-threaded programs. Threads that block
923 performing I/O, for example, won't block threads that are doing other
924 things. Each process still has only one thread running at once,
925 though, regardless of how many CPUs a system might have.
926
927 Since kernel threading can interrupt a thread at any time, they will
928 uncover some of the implicit locking assumptions you may make in your
929 program. For example, something as simple as "$x = $x + 2" can behave
930 unpredictably with kernel threads if $x is visible to other threads, as
931 another thread may have changed $x between the time it was fetched on
932 the right hand side and the time the new value is stored.
933
934 Multiprocessor kernel threads are the final step in thread support.
935 With multiprocessor kernel threads on a machine with multiple CPUs, the
936 OS may schedule two or more threads to run simultaneously on different
937 CPUs.
938
939 This can give a serious performance boost to your threaded program,
940 since more than one thread will be executing at the same time. As a
941 tradeoff, though, any of those nagging synchronization issues that
942 might not have shown with basic kernel threads will appear with a
943 vengeance.
944
945 In addition to the different levels of OS involvement in threads,
946 different OSes (and different thread implementations for a particular
947 OS) allocate CPU cycles to threads in different ways.
948
949 Cooperative multitasking systems have running threads give up control
950 if one of two things happen. If a thread calls a yield function, it
951 gives up control. It also gives up control if the thread does
952 something that would cause it to block, such as perform I/O. In a
953 cooperative multitasking implementation, one thread can starve all the
954 others for CPU time if it so chooses.
955
956 Preemptive multitasking systems interrupt threads at regular intervals
957 while the system decides which thread should run next. In a preemptive
958 multitasking system, one thread usually won't monopolize the CPU.
959
960 On some systems, there can be cooperative and preemptive threads
961 running simultaneously. (Threads running with realtime priorities often
962 behave cooperatively, for example, while threads running at normal
963 priorities behave preemptively.)
964
965 Most modern operating systems support preemptive multitasking nowadays.
966
968 The main thing to bear in mind when comparing Perl's ithreads to other
969 threading models is the fact that for each new thread created, a
970 complete copy of all the variables and data of the parent thread has to
971 be taken. Thus, thread creation can be quite expensive, both in terms
972 of memory usage and time spent in creation. The ideal way to reduce
973 these costs is to have a relatively short number of long-lived threads,
974 all created fairly early on (before the base thread has accumulated too
975 much data). Of course, this may not always be possible, so compromises
976 have to be made. However, after a thread has been created, its
977 performance and extra memory usage should be little different than
978 ordinary code.
979
980 Also note that under the current implementation, shared variables use a
981 little more memory and are a little slower than ordinary variables.
982
984 Note that while threads themselves are separate execution threads and
985 Perl data is thread-private unless explicitly shared, the threads can
986 affect process-scope state, affecting all the threads.
987
988 The most common example of this is changing the current working
989 directory using "chdir()". One thread calls "chdir()", and the working
990 directory of all the threads changes.
991
992 Even more drastic example of a process-scope change is "chroot()": the
993 root directory of all the threads changes, and no thread can undo it
994 (as opposed to "chdir()").
995
996 Further examples of process-scope changes include "umask()" and
997 changing uids and gids.
998
999 Thinking of mixing "fork()" and threads? Please lie down and wait
1000 until the feeling passes. Be aware that the semantics of "fork()" vary
1001 between platforms. For example, some Unix systems copy all the current
1002 threads into the child process, while others only copy the thread that
1003 called "fork()". You have been warned!
1004
1005 Similarly, mixing signals and threads may be problematic.
1006 Implementations are platform-dependent, and even the POSIX semantics
1007 may not be what you expect (and Perl doesn't even give you the full
1008 POSIX API). For example, there is no way to guarantee that a signal
1009 sent to a multi-threaded Perl application will get intercepted by any
1010 particular thread. (However, a recently added feature does provide the
1011 capability to send signals between threads. See "THREAD SIGNALLING" in
1012 threads for more details.)
1013
1015 Whether various library calls are thread-safe is outside the control of
1016 Perl. Calls often suffering from not being thread-safe include:
1017 "localtime()", "gmtime()", functions fetching user, group and network
1018 information (such as "getgrent()", "gethostent()", "getnetent()" and so
1019 on), "readdir()", "rand()", and "srand()". In general, calls that
1020 depend on some global external state.
1021
1022 If the system Perl is compiled in has thread-safe variants of such
1023 calls, they will be used. Beyond that, Perl is at the mercy of the
1024 thread-safety or -unsafety of the calls. Please consult your C library
1025 call documentation.
1026
1027 On some platforms the thread-safe library interfaces may fail if the
1028 result buffer is too small (for example the user group databases may be
1029 rather large, and the reentrant interfaces may have to carry around a
1030 full snapshot of those databases). Perl will start with a small
1031 buffer, but keep retrying and growing the result buffer until the
1032 result fits. If this limitless growing sounds bad for security or
1033 memory consumption reasons you can recompile Perl with
1034 "PERL_REENTRANT_MAXSIZE" defined to the maximum number of bytes you
1035 will allow.
1036
1038 A complete thread tutorial could fill a book (and has, many times), but
1039 with what we've covered in this introduction, you should be well on
1040 your way to becoming a threaded Perl expert.
1041
1043 Annotated POD for threads:
1044 <https://web.archive.org/web/20171028020148/http://annocpan.org/?mode=search&field=Module&name=threads>
1045
1046 Latest version of threads on CPAN: <https://metacpan.org/pod/threads>
1047
1048 Annotated POD for threads::shared:
1049 <https://web.archive.org/web/20171028020148/http://annocpan.org/?mode=search&field=Module&name=threads%3A%3Ashared>
1050
1051 Latest version of threads::shared on CPAN:
1052 <https://metacpan.org/pod/threads::shared>
1053
1054 Perl threads mailing list: <https://lists.perl.org/list/ithreads.html>
1055
1057 Here's a short bibliography courtesy of Juergen Christoffel:
1058
1059 Introductory Texts
1060 Birrell, Andrew D. An Introduction to Programming with Threads. Digital
1061 Equipment Corporation, 1989, DEC-SRC Research Report #35 online as
1062 <https://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-35.pdf> (highly
1063 recommended)
1064
1065 Robbins, Kay. A., and Steven Robbins. Practical Unix Programming: A
1066 Guide to Concurrency, Communication, and Multithreading. Prentice-Hall,
1067 1996.
1068
1069 Lewis, Bill, and Daniel J. Berg. Multithreaded Programming with
1070 Pthreads. Prentice Hall, 1997, ISBN 0-13-443698-9 (a well-written
1071 introduction to threads).
1072
1073 Nelson, Greg (editor). Systems Programming with Modula-3. Prentice
1074 Hall, 1991, ISBN 0-13-590464-1.
1075
1076 Nichols, Bradford, Dick Buttlar, and Jacqueline Proulx Farrell.
1077 Pthreads Programming. O'Reilly & Associates, 1996, ISBN 156592-115-1
1078 (covers POSIX threads).
1079
1080 OS-Related References
1081 Boykin, Joseph, David Kirschen, Alan Langerman, and Susan LoVerso.
1082 Programming under Mach. Addison-Wesley, 1994, ISBN 0-201-52739-1.
1083
1084 Tanenbaum, Andrew S. Distributed Operating Systems. Prentice Hall,
1085 1995, ISBN 0-13-219908-4 (great textbook).
1086
1087 Silberschatz, Abraham, and Peter B. Galvin. Operating System Concepts,
1088 4th ed. Addison-Wesley, 1995, ISBN 0-201-59292-4
1089
1090 Other References
1091 Arnold, Ken and James Gosling. The Java Programming Language, 2nd ed.
1092 Addison-Wesley, 1998, ISBN 0-201-31006-6.
1093
1094 comp.programming.threads FAQ,
1095 <http://www.serpentine.com/~bos/threads-faq/>
1096
1097 Le Sergent, T. and B. Berthomieu. "Incremental MultiThreaded Garbage
1098 Collection on Virtually Shared Memory Architectures" in Memory
1099 Management: Proc. of the International Workshop IWMM 92, St. Malo,
1100 France, September 1992, Yves Bekkers and Jacques Cohen, eds. Springer,
1101 1992, ISBN 3540-55940-X (real-life thread applications).
1102
1103 Artur Bergman, "Where Wizards Fear To Tread", June 11, 2002,
1104 <http://www.perl.com/pub/a/2002/06/11/threads.html>
1105
1107 Thanks (in no particular order) to Chaim Frenkel, Steve Fink, Gurusamy
1108 Sarathy, Ilya Zakharevich, Benjamin Sugars, Juergen Christoffel, Joshua
1109 Pritikin, and Alan Burlison, for their help in reality-checking and
1110 polishing this article. Big thanks to Tom Christiansen for his rewrite
1111 of the prime number generator.
1112
1114 Dan Sugalski <dan@sidhe.org>
1115
1116 Slightly modified by Arthur Bergman to fit the new thread model/module.
1117
1118 Reworked slightly by Joerg Walter <jwalt@cpan.org> to be more concise
1119 about thread-safety of Perl code.
1120
1121 Rearranged slightly by Elizabeth Mattijsen <liz@dijkmat.nl> to put less
1122 emphasis on yield().
1123
1125 The original version of this article originally appeared in The Perl
1126 Journal #10, and is copyright 1998 The Perl Journal. It appears
1127 courtesy of Jon Orwant and The Perl Journal. This document may be
1128 distributed under the same terms as Perl itself.
1129
1130
1131
1132perl v5.36.3 2023-11-30 PERLTHRTUT(1)