in reply to Running perl threads in loop
Update: Handling the edge case where scalar(@work) <= $MAXTHREADS is left as an exercise.#!/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) / $MAXTHREA +DS ); 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"; }
My goal ... to kill off the slow brain cells that are holding me back from synergizing my knowledge of vertically integrated mobile platforms in local cloud-based content management system datafication.
|
|---|