#!/opt/coolstack/bin/perl -w use strict; use POSIX; use threads ('yield', 'stack_size' => 64*4096, 'exit' => 'threads_only', 'stringify'); use Thread::Queue; my $nthreads = 16; my $indata = new Thread::Queue; print "START PARSER: " . localtime() . "\n"; my @tloaders; print "LAUNCH LOADER THREADS\n"; my ($thr) = threads->create(\&load, $fname); push @tloaders, $thr->tid(); print "LOADER THREADS LAUNCHED\n"; print "LAUNCH WORKER THREADS\n"; for (my $i=0; $i < ($nthreads); $i++) { my ($thr) = threads->create(\&analyse ); } print "WORKER THREADS LAUNCHED\n"; print "WAITING FOR LOADERS TO FINISH\n"; foreach my $i (@tloaders) { my $thr = threads->object($i); print "WAITING ON THREAD: " . $thr->tid() . "\n"; $thr->join(); } print "LOADERS HAVE FINISHED: " . localtime() . "\n"; for (my $i=0; $i < ($nthreads); $i++) { $indata->enqueue("STOP"); } foreach my $thr (threads->list()) { print "WAITING ON THREAD: " . $thr->tid() . "\n"; $thr->join(); } print "END PARSER: " . localtime() . "\n"; exit; #### $ perl -v This is perl, v5.8.8 built for sun4-solaris-thread-multi Copyright 1987-2006, Larry Wall