in reply to Threads join vs detach
For example, if you modify your code to return a random integer from 1 to 100 (in spawnThread), you could then make use of that value from the parent thread:
use warnings; use strict; use threads; use threads::shared; #use Time::HiRes; #my $t0 = Time::HiRes::time; my @array : shared; for (1..50) { push @array, $_; } my $thr = threads->create(\&spawnThread); my $thr2 = threads->create(\&spawnThread); my $thr3 = threads->create(\&spawnThread); my $thr4 = threads->create(\&spawnThread); my $thr5 = threads->create(\&spawnThread); printf "Result = %d\n", $thr->join(); printf "Result = %d\n", $thr2->join(); printf "Result = %d\n", $thr3->join(); printf "Result = %d\n", $thr4->join(); printf "Result = %d\n", $thr5->join(); #my $t1 = Time::HiRes::time; #my $elapsed = $t1 - $t0; #print "\nElapsed Time: $elapsed\n"; sub spawnThread { for(1..10) { my $index = shift @array; print "$_ => $index\n"; } return int rand(100); }
Prints something like:
1 => 1 1 => 2 1 => 3 1 => 4 1 => 5 . . . 1 => 41 2 => 42 3 => 43 4 => 44 5 => 45 6 => 46 7 => 47 8 => 48 9 => 49 10 => 50 Result = 89 Result = 51 Result = 71 Result = 15 Result = 7
However in your original program, you weren't doing anything with the return value (in fact, you weren't even explicitly returning anything), so it would have been perfectly safe to call detach() on any or all of the threads, to avoid having to manage them further.
|
|---|