Perl - Threads

From Torben's Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Parallel computation using multiple threads for usage of multiple cpu cores. From [1]

use strict; use warnings;

use threads;
use Thread::Queue;
my $numThreads = 2;

# Preparing Threads
my $q = new Thread::Queue;
my @Threads = ();

# the work to be done for all items of thread queue
sub tsub {
  my $thrNum = shift;
# processing query
  while (my $x = $q->dequeue) {
    $_ = "$pathToGnuplot $gpoutfile";
    say "Thread $thrNum: $x";
    system($x);  # $x = gnuplotfile
  }
  return;
}  

# Filling the queue with the list
$q->enqueue($_) for (@OutFiles);
for (1..$numThreads) { $q->enqueue(undef); } # for stop condition
# Fill the Threads Object
for my $thrNum (1..$numThreads) { 
  push @Threads,threads->new(\&tsub,$thrNum);
}

# Wait for all threads to complete execution.
foreach (@Threads) {
  print $_->join; # wait for thread, returns return value
}

Sharing variables

use threads::shared;
my $count :shared ;
...
sub threadSub{
  lock ($count); #until end of block
  $count ++;  # test
}