#!/opt/perl/bin/perl use strict; use threads; use Thread::Semaphore; my $fh; open($fh,'|-','gzip > test.txt'); foreach(1..1000) { print {$fh} sprintf('%04d',$_).('abc123' x 10)."\n"; } close($fh); open($fh,'-|','gzip','-cd','test.txt'); $| = 1; my @threads = (); my $sem = Thread::Semaphore->new(); foreach(1..3) { push(@threads,threads->create(\&test)); } $_->join() foreach(@threads); close($fh); print "\n"; sub test { my $tid = threads->tid(); my $line; while(1) { threads->yield(); $sem->down(); $line = <$fh> or last; print "Thread $tid ".$line; $sem->up(); } $sem->up(); }