use strict;
use warnings;
# Use thread module
use threads ('yield','stack_size' => 64*4096,'exit' => 'threads_only','stringify');
&RunThreads();
#################################################################################
# SubRoutines
sub RunThreads()
{
# Running thread List
my @findFilesThreads;
# Create Threads
my $dirName = "Directory1";
my @filesList = ("file11","file12","file13");
# Launch thread with its argument
my $thr = threads->create('ThreadFunc',($dirName,@filesList ));
push(@findFilesThreads,$thr);
$dirName = "Directory2";
@filesList = ("file21","file22","file23");
# Launch thread with its argument
$thr = threads->create('ThreadFunc',($dirName,@filesList ));
push(@findFilesThreads,$thr);
$dirName = "Directory3";
@filesList = ("file31","file32","file33");
# Launch thread with its argument
$thr = threads->create('ThreadFunc',($dirName,@filesList ));
push(@findFilesThreads,$thr);
# Wait threads to finish
foreach (@findFilesThreads)
{
my $thread = $_;
if (defined($thread))
{
if ($thread->is_running())
{
$thread->join();
}
else
{
$thread->detach()
}
}
}
}
# The Thread subroutin
sub ThreadFunc
{
my ($dirName,@filesName) = @_;
# Random sleep, So every time the Thread print order will be different
sleep rand(5);
print "Directory name is : $dirName\n";
print "Files are : \n";
foreach (@filesName)
{
print " $_\n";
}
}
The output of this script should look like (Every time the thread order will be different) :
Directory name is : Directory2
Files are :
file21
file22
file23
Directory name is : Directory3
Files are :
file31
file32
file33
Directory name is : Directory1
Files are :
file11
file12
file13
No comments:
Post a Comment