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.
In reply to Re: Running perl threads in loop
by NetWallah
in thread Running perl threads in loop
by dvinay
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |