#!/usr/bin/perl use strict; use warnings; use threads; #use threads::shared; print "Starting main program\n"; my $MAXTHREADS=5; my @work= map{int(rand()*1000)} 1..rand()*200; print "Work to do: " , scalar(@work) , " entries:\n\t@work\n\n"; my (@threads); my $workstart= 0; my $workincrement = int((scalar(@work) + $MAXTHREADS - 1) / $MAXTHREADS ); for my $CurrentThreadNumber (1..$MAXTHREADS) { my $t = threads->new(\&sub1, $CurrentThreadNumber, $workstart, $workstart+$workincrement); $workstart +=$workincrement+1; push(@threads,$t); } foreach (@threads) { $_->join; } print "End of main program\n"; sub sub1 { my ($thn,$workstart, $workend)=@_; $workend =$#work if $workend > $#work; print "in Thread $thn starting $workstart Till $workend\n"; print "($thn: $work[$_]) " for $workstart..$workend; print "\n"; sleep rand() * 10; print "Exiting Thread $thn\n"; }