sandy1028 has asked for the wisdom of the Perl Monks concerning the following question:
Hi,
Here in the for loop, the values passed is between 1 to 200000.
In the log file only 600 values are printed. How can I print all the values in the log file by creating 5 threads.
In the log file only 600 values are printed. How can I print all the values in the log file by creating 5 threads.
#! perl -slw use strict; use threads; use threads::shared; our $N ||= 100; our $from=1; our $to=200000; sub worker { my $tid = threads->tid; my( $log, $semRef, $from, $to ) = @_; for my $file ( $from .. $to ) { ## Simulate doing some processing ## Lock the log file semaphore before writing lock $$semRef; ## And write to the log printf $log "[%2d] Processesing file%3d\n", $tid, $file; ## The lock is released automatically at the end of the block } } ## A shared variable used as a semaphore for the log file resource my $logSem :shared; ## Open the log file in the main thread open my $log, '>', 'myLog2' or die $!; my @threads = map{ ## create the workers passing the log file handle and semaphore threads->create( \&worker, $log, \$logSem,$_*$N, $_*$N + $N -1); } 0 .. 5; ## 5 threads each processing 100 "files" ## Wait till they are done $_->join for @threads; ## close the log close $log;
Back to
Seekers of Perl Wisdom