#! perl -slw use strict; use threads; use Thread::Queue; $|=1; my $QpRead = new Thread::Queue; my $QkRead = new Thread::Queue; if( defined( my $kid=fork() ) ) { print 'Forked'; if( $kid ) { # Parent print 'Pop ', $$; while( 1 ) { print "Kid said: ", $QpRead->dequeue while $QpRead->pending; Win32::Sleep rand 1000; $QkRead->enqueue( 'Blah ' x rand 10 ) if rand > .5; } } else { # Kid print 'Kid ', $$; while( 1 ) { print "Pop said: ", $QkRead->dequeue while $QkRead->pending; Win32::Sleep rand 1000; $QpRead->enqueue( 'Blah ' x rand 10 ) if rand > .5; } } } else { die "Fork failed: $!"; } __END__ P:\test>357845 Forked Pop 416 Forked Kid -1140 Pop said: Blah Blah Blah Kid said: Blah Blah Blah Blah Kid said: Blah Kid said: Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Pop said: Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Blah Blah Pop said: Kid said: Blah Blah Blah Blah Pop said: Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Kid said: Blah Pop said: Blah Blah Blah Blah Blah Blah Blah Blah Kid said: Blah Blah Blah Blah Blah Blah Blah Pop said: Blah Kid said: Blah Blah Blah Blah Blah Pop said: Blah Blah Blah Kid said: Blah Terminating on signal SIGINT(2)