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 new
216 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 instead,
265 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 detached,
281 it'll run until it's finished; then Perl will clean up after it
282 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 and
423 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. No
465 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 available.
498 When lock() returns, your thread can be sure that no other thread can
499 lock that variable until the block containing the lock exits.
500
501 It's important to note that locks don't prevent access to the variable
502 in question, only lock attempts. This is in keeping with Perl's
503 longstanding tradition of courteous programming, and the advisory file
504 locking that flock() gives you.
505
506 You may lock arrays and hashes as well as scalars. Locking an array,
507 though, will not block subsequent locks on array elements, just lock
508 attempts on the array itself.
509
510 Locks are recursive, which means it's okay for a thread to lock a
511 variable more than once. The lock will last until the outermost lock()
512 on the variable goes out of scope. For example:
513
514 my $x :shared;
515 doit();
516
517 sub doit {
518 {
519 {
520 lock($x); # Wait for lock
521 lock($x); # NOOP - we already have the lock
522 {
523 lock($x); # NOOP
524 {
525 lock($x); # NOOP
526 lockit_some_more();
527 }
528 }
529 } # *** Implicit unlock here ***
530 }
531 }
532
533 sub lockit_some_more {
534 lock($x); # NOOP
535 } # Nothing happens here
536
537 Note that there is no unlock() function - the only way to unlock a
538 variable is to allow it to go out of scope.
539
540 A lock can either be used to guard the data contained within the
541 variable being locked, or it can be used to guard something else, like
542 a section of code. In this latter case, the variable in question does
543 not hold any useful data, and exists only for the purpose of being
544 locked. In this respect, the variable behaves like the mutexes and
545 basic semaphores of traditional thread libraries.
546
547 A Thread Pitfall: Deadlocks
548 Locks are a handy tool to synchronize access to data, and using them
549 properly is the key to safe shared data. Unfortunately, locks aren't
550 without their dangers, especially when multiple locks are involved.
551 Consider the following code:
552
553 use threads;
554
555 my $x :shared = 4;
556 my $y :shared = 'foo';
557 my $thr1 = threads->create(sub {
558 lock($x);
559 sleep(20);
560 lock($y);
561 });
562 my $thr2 = threads->create(sub {
563 lock($y);
564 sleep(20);
565 lock($x);
566 });
567
568 This program will probably hang until you kill it. The only way it
569 won't hang is if one of the two threads acquires both locks first. A
570 guaranteed-to-hang version is more complicated, but the principle is
571 the same.
572
573 The first thread will grab a lock on $x, then, after a pause during
574 which the second thread has probably had time to do some work, try to
575 grab a lock on $y. Meanwhile, the second thread grabs a lock on $y,
576 then later tries to grab a lock on $x. The second lock attempt for
577 both threads will block, each waiting for the other to release its
578 lock.
579
580 This condition is called a deadlock, and it occurs whenever two or more
581 threads are trying to get locks on resources that the others own. Each
582 thread will block, waiting for the other to release a lock on a
583 resource. That never happens, though, since the thread with the
584 resource is itself waiting for a lock to be released.
585
586 There are a number of ways to handle this sort of problem. The best
587 way is to always have all threads acquire locks in the exact same
588 order. If, for example, you lock variables $x, $y, and $z, always lock
589 $x before $y, and $y before $z. It's also best to hold on to locks for
590 as short a period of time to minimize the risks of deadlock.
591
592 The other synchronization primitives described below can suffer from
593 similar problems.
594
595 Queues: Passing Data Around
596 A queue is a special thread-safe object that lets you put data in one
597 end and take it out the other without having to worry about
598 synchronization issues. They're pretty straightforward, and look like
599 this:
600
601 use threads;
602 use Thread::Queue;
603
604 my $DataQueue = Thread::Queue->new();
605 my $thr = threads->create(sub {
606 while (my $DataElement = $DataQueue->dequeue()) {
607 print("Popped $DataElement off the queue\n");
608 }
609 });
610
611 $DataQueue->enqueue(12);
612 $DataQueue->enqueue("A", "B", "C");
613 sleep(10);
614 $DataQueue->enqueue(undef);
615 $thr->join();
616
617 You create the queue with "Thread::Queue->new()". Then you can add
618 lists of scalars onto the end with enqueue(), and pop scalars off the
619 front of it with dequeue(). A queue has no fixed size, and can grow as
620 needed to hold everything pushed on to it.
621
622 If a queue is empty, dequeue() blocks until another thread enqueues
623 something. This makes queues ideal for event loops and other
624 communications between threads.
625
626 Semaphores: Synchronizing Data Access
627 Semaphores are a kind of generic locking mechanism. In their most basic
628 form, they behave very much like lockable scalars, except that they
629 can't hold data, and that they must be explicitly unlocked. In their
630 advanced form, they act like a kind of counter, and can allow multiple
631 threads to have the lock at any one time.
632
633 Basic semaphores
634 Semaphores have two methods, down() and up(): down() decrements the
635 resource count, while up() increments it. Calls to down() will block if
636 the semaphore's current count would decrement below zero. This program
637 gives a quick demonstration:
638
639 use threads;
640 use Thread::Semaphore;
641
642 my $semaphore = Thread::Semaphore->new();
643 my $GlobalVariable :shared = 0;
644
645 $thr1 = threads->create(\&sample_sub, 1);
646 $thr2 = threads->create(\&sample_sub, 2);
647 $thr3 = threads->create(\&sample_sub, 3);
648
649 sub sample_sub {
650 my $SubNumber = shift(@_);
651 my $TryCount = 10;
652 my $LocalCopy;
653 sleep(1);
654 while ($TryCount--) {
655 $semaphore->down();
656 $LocalCopy = $GlobalVariable;
657 print("$TryCount tries left for sub $SubNumber "
658 ."(\$GlobalVariable is $GlobalVariable)\n");
659 sleep(2);
660 $LocalCopy++;
661 $GlobalVariable = $LocalCopy;
662 $semaphore->up();
663 }
664 }
665
666 $thr1->join();
667 $thr2->join();
668 $thr3->join();
669
670 The three invocations of the subroutine all operate in sync. The
671 semaphore, though, makes sure that only one thread is accessing the
672 global variable at once.
673
674 Advanced Semaphores
675 By default, semaphores behave like locks, letting only one thread
676 down() them at a time. However, there are other uses for semaphores.
677
678 Each semaphore has a counter attached to it. By default, semaphores are
679 created with the counter set to one, down() decrements the counter by
680 one, and up() increments by one. However, we can override any or all of
681 these defaults simply by passing in different values:
682
683 use threads;
684 use Thread::Semaphore;
685
686 my $semaphore = Thread::Semaphore->new(5);
687 # Creates a semaphore with the counter set to five
688
689 my $thr1 = threads->create(\&sub1);
690 my $thr2 = threads->create(\&sub1);
691
692 sub sub1 {
693 $semaphore->down(5); # Decrements the counter by five
694 # Do stuff here
695 $semaphore->up(5); # Increment the counter by five
696 }
697
698 $thr1->detach();
699 $thr2->detach();
700
701 If down() attempts to decrement the counter below zero, it blocks until
702 the counter is large enough. Note that while a semaphore can be
703 created with a starting count of zero, any up() or down() always
704 changes the counter by at least one, and so "$semaphore->down(0)" is
705 the same as "$semaphore->down(1)".
706
707 The question, of course, is why would you do something like this? Why
708 create a semaphore with a starting count that's not one, or why
709 decrement or increment it by more than one? The answer is resource
710 availability. Many resources that you want to manage access for can be
711 safely used by more than one thread at once.
712
713 For example, let's take a GUI driven program. It has a semaphore that
714 it uses to synchronize access to the display, so only one thread is
715 ever drawing at once. Handy, but of course you don't want any thread
716 to start drawing until things are properly set up. In this case, you
717 can create a semaphore with a counter set to zero, and up it when
718 things are ready for drawing.
719
720 Semaphores with counters greater than one are also useful for
721 establishing quotas. Say, for example, that you have a number of
722 threads that can do I/O at once. You don't want all the threads
723 reading or writing at once though, since that can potentially swamp
724 your I/O channels, or deplete your process's quota of filehandles. You
725 can use a semaphore initialized to the number of concurrent I/O
726 requests (or open files) that you want at any one time, and have your
727 threads quietly block and unblock themselves.
728
729 Larger increments or decrements are handy in those cases where a thread
730 needs to check out or return a number of resources at once.
731
732 Waiting for a Condition
733 The functions cond_wait() and cond_signal() can be used in conjunction
734 with locks to notify co-operating threads that a resource has become
735 available. They are very similar in use to the functions found in
736 "pthreads". However for most purposes, queues are simpler to use and
737 more intuitive. See threads::shared for more details.
738
739 Giving up control
740 There are times when you may find it useful to have a thread explicitly
741 give up the CPU to another thread. You may be doing something
742 processor-intensive and want to make sure that the user-interface
743 thread gets called frequently. Regardless, there are times that you
744 might want a thread to give up the processor.
745
746 Perl's threading package provides the yield() function that does this.
747 yield() is pretty straightforward, and works like this:
748
749 use threads;
750
751 sub loop {
752 my $thread = shift;
753 my $foo = 50;
754 while($foo--) { print("In thread $thread\n"); }
755 threads->yield();
756 $foo = 50;
757 while($foo--) { print("In thread $thread\n"); }
758 }
759
760 my $thr1 = threads->create(\&loop, 'first');
761 my $thr2 = threads->create(\&loop, 'second');
762 my $thr3 = threads->create(\&loop, 'third');
763
764 It is important to remember that yield() is only a hint to give up the
765 CPU, it depends on your hardware, OS and threading libraries what
766 actually happens. On many operating systems, yield() is a no-op.
767 Therefore it is important to note that one should not build the
768 scheduling of the threads around yield() calls. It might work on your
769 platform but it won't work on another platform.
770
772 We've covered the workhorse parts of Perl's threading package, and with
773 these tools you should be well on your way to writing threaded code and
774 packages. There are a few useful little pieces that didn't really fit
775 in anyplace else.
776
777 What Thread Am I In?
778 The "threads->self()" class method provides your program with a way to
779 get an object representing the thread it's currently in. You can use
780 this object in the same way as the ones returned from thread creation.
781
782 Thread IDs
783 tid() is a thread object method that returns the thread ID of the
784 thread the object represents. Thread IDs are integers, with the main
785 thread in a program being 0. Currently Perl assigns a unique TID to
786 every thread ever created in your program, assigning the first thread
787 to be created a TID of 1, and increasing the TID by 1 for each new
788 thread that's created. When used as a class method, "threads->tid()"
789 can be used by a thread to get its own TID.
790
791 Are These Threads The Same?
792 The equal() method takes two thread objects and returns true if the
793 objects represent the same thread, and false if they don't.
794
795 Thread objects also have an overloaded "==" comparison so that you can
796 do comparison on them as you would with normal objects.
797
798 What Threads Are Running?
799 "threads->list()" returns a list of thread objects, one for each thread
800 that's currently running and not detached. Handy for a number of
801 things, including cleaning up at the end of your program (from the main
802 Perl thread, of course):
803
804 # Loop through all the threads
805 foreach my $thr (threads->list()) {
806 $thr->join();
807 }
808
809 If some threads have not finished running when the main Perl thread
810 ends, Perl will warn you about it and die, since it is impossible for
811 Perl to clean up itself while other threads are running.
812
813 NOTE: The main Perl thread (thread 0) is in a detached state, and so
814 does not appear in the list returned by "threads->list()".
815
817 Confused yet? It's time for an example program to show some of the
818 things we've covered. This program finds prime numbers using threads.
819
820 1 #!/usr/bin/perl
821 2 # prime-pthread, courtesy of Tom Christiansen
822 3
823 4 use v5.36;
824 5
825 6 use threads;
826 7 use Thread::Queue;
827 8
828 9 sub check_num ($upstream, $cur_prime) {
829 10 my $kid;
830 11 my $downstream = Thread::Queue->new();
831 12 while (my $num = $upstream->dequeue()) {
832 13 next unless ($num % $cur_prime);
833 14 if ($kid) {
834 15 $downstream->enqueue($num);
835 16 } else {
836 17 print("Found prime: $num\n");
837 18 $kid = threads->create(\&check_num, $downstream, $num);
838 19 if (! $kid) {
839 20 warn("Sorry. Ran out of threads.\n");
840 21 last;
841 22 }
842 23 }
843 24 }
844 25 if ($kid) {
845 26 $downstream->enqueue(undef);
846 27 $kid->join();
847 28 }
848 29 }
849 30
850 31 my $stream = Thread::Queue->new(3..1000, undef);
851 32 check_num($stream, 2);
852
853 This program uses the pipeline model to generate prime numbers. Each
854 thread in the pipeline has an input queue that feeds numbers to be
855 checked, a prime number that it's responsible for, and an output queue
856 into which it funnels numbers that have failed the check. If the
857 thread has a number that's failed its check and there's no child
858 thread, then the thread must have found a new prime number. In that
859 case, a new child thread is created for that prime and stuck on the end
860 of the pipeline.
861
862 This probably sounds a bit more confusing than it really is, so let's
863 go through this program piece by piece and see what it does. (For
864 those of you who might be trying to remember exactly what a prime
865 number is, it's a number that's only evenly divisible by itself and 1.)
866
867 The bulk of the work is done by the check_num() subroutine, which takes
868 a reference to its input queue and a prime number that it's responsible
869 for. We create a new queue (line 11) and reserve a scalar for the
870 thread that we're likely to create later (line 10).
871
872 The while loop from line 12 to line 24 grabs a scalar off the input
873 queue and checks against the prime this thread is responsible for.
874 Line 13 checks to see if there's a remainder when we divide the number
875 to be checked by our prime. If there is one, the number must not be
876 evenly divisible by our prime, so we need to either pass it on to the
877 next thread if we've created one (line 15) or create a new thread if we
878 haven't.
879
880 The new thread creation is line 18. We pass on to it a reference to
881 the queue we've created, and the prime number we've found. In lines 19
882 through 22, we check to make sure that our new thread got created, and
883 if not, we stop checking any remaining numbers in the queue.
884
885 Finally, once the loop terminates (because we got a 0 or "undef" in the
886 queue, which serves as a note to terminate), we pass on the notice to
887 our child, and wait for it to exit if we've created a child (lines 25
888 and 28).
889
890 Meanwhile, back in the main thread, we first create a queue (line 31)
891 and queue up all the numbers from 3 to 1000 for checking, plus a
892 termination notice. Then all we have to do to get the ball rolling is
893 pass the queue and the first prime to the check_num() subroutine (line
894 32).
895
896 That's how it works. It's pretty simple; as with many Perl programs,
897 the explanation is much longer than the program.
898
900 Some background on thread implementations from the operating system
901 viewpoint. There are three basic categories of threads: user-mode
902 threads, kernel threads, and multiprocessor kernel threads.
903
904 User-mode threads are threads that live entirely within a program and
905 its libraries. In this model, the OS knows nothing about threads. As
906 far as it's concerned, your process is just a process.
907
908 This is the easiest way to implement threads, and the way most OSes
909 start. The big disadvantage is that, since the OS knows nothing about
910 threads, if one thread blocks they all do. Typical blocking activities
911 include most system calls, most I/O, and things like sleep().
912
913 Kernel threads are the next step in thread evolution. The OS knows
914 about kernel threads, and makes allowances for them. The main
915 difference between a kernel thread and a user-mode thread is blocking.
916 With kernel threads, things that block a single thread don't block
917 other threads. This is not the case with user-mode threads, where the
918 kernel blocks at the process level and not the thread level.
919
920 This is a big step forward, and can give a threaded program quite a
921 performance boost over non-threaded programs. Threads that block
922 performing I/O, for example, won't block threads that are doing other
923 things. Each process still has only one thread running at once,
924 though, regardless of how many CPUs a system might have.
925
926 Since kernel threading can interrupt a thread at any time, they will
927 uncover some of the implicit locking assumptions you may make in your
928 program. For example, something as simple as "$x = $x + 2" can behave
929 unpredictably with kernel threads if $x is visible to other threads, as
930 another thread may have changed $x between the time it was fetched on
931 the right hand side and the time the new value is stored.
932
933 Multiprocessor kernel threads are the final step in thread support.
934 With multiprocessor kernel threads on a machine with multiple CPUs, the
935 OS may schedule two or more threads to run simultaneously on different
936 CPUs.
937
938 This can give a serious performance boost to your threaded program,
939 since more than one thread will be executing at the same time. As a
940 tradeoff, though, any of those nagging synchronization issues that
941 might not have shown with basic kernel threads will appear with a
942 vengeance.
943
944 In addition to the different levels of OS involvement in threads,
945 different OSes (and different thread implementations for a particular
946 OS) allocate CPU cycles to threads in different ways.
947
948 Cooperative multitasking systems have running threads give up control
949 if one of two things happen. If a thread calls a yield function, it
950 gives up control. It also gives up control if the thread does
951 something that would cause it to block, such as perform I/O. In a
952 cooperative multitasking implementation, one thread can starve all the
953 others for CPU time if it so chooses.
954
955 Preemptive multitasking systems interrupt threads at regular intervals
956 while the system decides which thread should run next. In a preemptive
957 multitasking system, one thread usually won't monopolize the CPU.
958
959 On some systems, there can be cooperative and preemptive threads
960 running simultaneously. (Threads running with realtime priorities often
961 behave cooperatively, for example, while threads running at normal
962 priorities behave preemptively.)
963
964 Most modern operating systems support preemptive multitasking nowadays.
965
967 The main thing to bear in mind when comparing Perl's ithreads to other
968 threading models is the fact that for each new thread created, a
969 complete copy of all the variables and data of the parent thread has to
970 be taken. Thus, thread creation can be quite expensive, both in terms
971 of memory usage and time spent in creation. The ideal way to reduce
972 these costs is to have a relatively short number of long-lived threads,
973 all created fairly early on (before the base thread has accumulated too
974 much data). Of course, this may not always be possible, so compromises
975 have to be made. However, after a thread has been created, its
976 performance and extra memory usage should be little different than
977 ordinary code.
978
979 Also note that under the current implementation, shared variables use a
980 little more memory and are a little slower than ordinary variables.
981
983 Note that while threads themselves are separate execution threads and
984 Perl data is thread-private unless explicitly shared, the threads can
985 affect process-scope state, affecting all the threads.
986
987 The most common example of this is changing the current working
988 directory using chdir(). One thread calls chdir(), and the working
989 directory of all the threads changes.
990
991 Even more drastic example of a process-scope change is chroot(): the
992 root directory of all the threads changes, and no thread can undo it
993 (as opposed to chdir()).
994
995 Further examples of process-scope changes include umask() and changing
996 uids and gids.
997
998 Thinking of mixing fork() and threads? Please lie down and wait until
999 the feeling passes. Be aware that the semantics of fork() vary between
1000 platforms. For example, some Unix systems copy all the current threads
1001 into the child process, while others only copy the thread that called
1002 fork(). You have been warned!
1003
1004 Similarly, mixing signals and threads may be problematic.
1005 Implementations are platform-dependent, and even the POSIX semantics
1006 may not be what you expect (and Perl doesn't even give you the full
1007 POSIX API). For example, there is no way to guarantee that a signal
1008 sent to a multi-threaded Perl application will get intercepted by any
1009 particular thread. (However, a recently added feature does provide the
1010 capability to send signals between threads. See "THREAD SIGNALLING" in
1011 threads for more details.)
1012
1014 Whether various library calls are thread-safe is outside the control of
1015 Perl. Calls often suffering from not being thread-safe include:
1016 localtime(), gmtime(), functions fetching user, group and network
1017 information (such as getgrent(), gethostent(), getnetent() and so on),
1018 readdir(), rand(), and srand(). In general, calls that depend on some
1019 global external state.
1020
1021 If the system Perl is compiled in has thread-safe variants of such
1022 calls, they will be used. Beyond that, Perl is at the mercy of the
1023 thread-safety or -unsafety of the calls. Please consult your C library
1024 call documentation.
1025
1026 On some platforms the thread-safe library interfaces may fail if the
1027 result buffer is too small (for example the user group databases may be
1028 rather large, and the reentrant interfaces may have to carry around a
1029 full snapshot of those databases). Perl will start with a small
1030 buffer, but keep retrying and growing the result buffer until the
1031 result fits. If this limitless growing sounds bad for security or
1032 memory consumption reasons you can recompile Perl with
1033 "PERL_REENTRANT_MAXSIZE" defined to the maximum number of bytes you
1034 will allow.
1035
1037 A complete thread tutorial could fill a book (and has, many times), but
1038 with what we've covered in this introduction, you should be well on
1039 your way to becoming a threaded Perl expert.
1040
1042 Annotated POD for threads:
1043 <https://web.archive.org/web/20171028020148/http://annocpan.org/?mode=search&field=Module&name=threads>
1044
1045 Latest version of threads on CPAN: <https://metacpan.org/pod/threads>
1046
1047 Annotated POD for threads::shared:
1048 <https://web.archive.org/web/20171028020148/http://annocpan.org/?mode=search&field=Module&name=threads%3A%3Ashared>
1049
1050 Latest version of threads::shared on CPAN:
1051 <https://metacpan.org/pod/threads::shared>
1052
1053 Perl threads mailing list: <https://lists.perl.org/list/ithreads.html>
1054
1056 Here's a short bibliography courtesy of Jürgen Christoffel:
1057
1058 Introductory Texts
1059 Birrell, Andrew D. An Introduction to Programming with Threads. Digital
1060 Equipment Corporation, 1989, DEC-SRC Research Report #35 online as
1061 <https://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-35.pdf> (highly
1062 recommended)
1063
1064 Robbins, Kay. A., and Steven Robbins. Practical Unix Programming: A
1065 Guide to Concurrency, Communication, and Multithreading. Prentice-Hall,
1066 1996.
1067
1068 Lewis, Bill, and Daniel J. Berg. Multithreaded Programming with
1069 Pthreads. Prentice Hall, 1997, ISBN 0-13-443698-9 (a well-written
1070 introduction to threads).
1071
1072 Nelson, Greg (editor). Systems Programming with Modula-3. Prentice
1073 Hall, 1991, ISBN 0-13-590464-1.
1074
1075 Nichols, Bradford, Dick Buttlar, and Jacqueline Proulx Farrell.
1076 Pthreads Programming. O'Reilly & Associates, 1996, ISBN 156592-115-1
1077 (covers POSIX threads).
1078
1079 OS-Related References
1080 Boykin, Joseph, David Kirschen, Alan Langerman, and Susan LoVerso.
1081 Programming under Mach. Addison-Wesley, 1994, ISBN 0-201-52739-1.
1082
1083 Tanenbaum, Andrew S. Distributed Operating Systems. Prentice Hall,
1084 1995, ISBN 0-13-219908-4 (great textbook).
1085
1086 Silberschatz, Abraham, and Peter B. Galvin. Operating System Concepts,
1087 4th ed. Addison-Wesley, 1995, ISBN 0-201-59292-4
1088
1089 Other References
1090 Arnold, Ken and James Gosling. The Java Programming Language, 2nd ed.
1091 Addison-Wesley, 1998, ISBN 0-201-31006-6.
1092
1093 comp.programming.threads FAQ,
1094 <http://www.serpentine.com/~bos/threads-faq/>
1095
1096 Le Sergent, T. and B. Berthomieu. "Incremental MultiThreaded Garbage
1097 Collection on Virtually Shared Memory Architectures" in Memory
1098 Management: Proc. of the International Workshop IWMM 92, St. Malo,
1099 France, September 1992, Yves Bekkers and Jacques Cohen, eds. Springer,
1100 1992, ISBN 3540-55940-X (real-life thread applications).
1101
1102 Artur Bergman, "Where Wizards Fear To Tread", June 11, 2002,
1103 <http://www.perl.com/pub/a/2002/06/11/threads.html>
1104
1106 Thanks (in no particular order) to Chaim Frenkel, Steve Fink, Gurusamy
1107 Sarathy, Ilya Zakharevich, Benjamin Sugars, Jürgen Christoffel, Joshua
1108 Pritikin, and Alan Burlison, for their help in reality-checking and
1109 polishing this article. Big thanks to Tom Christiansen for his rewrite
1110 of the prime number generator.
1111
1113 Dan Sugalski <dan@sidhe.org>
1114
1115 Slightly modified by Arthur Bergman to fit the new thread model/module.
1116
1117 Reworked slightly by Jörg Walter <jwalt@cpan.org> to be more concise
1118 about thread-safety of Perl code.
1119
1120 Rearranged slightly by Elizabeth Mattijsen <liz@dijkmat.nl> to put less
1121 emphasis on yield().
1122
1124 The original version of this article originally appeared in The Perl
1125 Journal #10, and is copyright 1998 The Perl Journal. It appears
1126 courtesy of Jon Orwant and The Perl Journal. This document may be
1127 distributed under the same terms as Perl itself.
1128
1129
1130
1131perl v5.38.2 2023-11-30 PERLTHRTUT(1)