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