Hi,
Here I used the code for writing into single log file.
But the threads are not printing the "Processesing file" in sequence order and the lines overlap even if I use lock.
How can i avoid this?
#! perl -slw
use strict;
use threads;
use threads::shared;
our $from=1;
our $to=400020;
our $t=5;
sub worker {
my $tid = threads->tid;
# my( $log, $semRef, $from, $to ) = @_;
my( $log, $semRef, $from, $step, $to ) = @_;
for (my $file = $from ; $file <= $to ; $file += $step) {
lock $$semRef;
printf $log "The threads is [%2d] Processesing file%3d\n",$tid, $file
+;
}
}
## 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, '>', 'myLog' or die $!;
my @threads = map{
threads->create( \&worker, $log, \$logSem, $from + ($_ - 1), $t, $to
+) ;
} 1 .. $t ;
## Wait till they are done
$_->join for @threads;
## close the log
close $log;
The threads is [ 1] Processesing file16436
The threads is [ 1] Processesing file16441
The threads is [ 1] Processesing file 2] Processesing file2462
The threads is [ 2] Processesing file2467
The threads is [ 2] Processesing file2472
|