#! perl -slw use strict; use threads; use Thread::Queue; use threads::shared; use Time::HiRes qw[ time ]; $|++; our $N ||= 1000; our $M ||= 10; our $aClonedGlobal = 12345; our $aSharedGlobal :shared = 12345; my $aClonedLexical = 12345; my $aSharedLexical :shared = 12345; my $count :shared = 0; my $running :shared = 0; my $Q = new Thread::Queue; sub thread { { lock $running; ++$running } my $tid = threads->self->tid; my( $some, $thread, $local, $vars ) = (12345) x 4; require Carp; require IO::Socket; require LWP::UserAgent; $Q->enqueue( threads->tid ); sleep $M/10; { lock $running; --$running }; return 1; } threads->create( \&thread ) for 1 .. $M; my $start = time; while( 1 ) { threads->object( $Q->dequeue )->join; threads->create( \&thread ); printf "\r%d\t (%7.3f/sec)\t", ++$count, $count / ( time() - $start ); sleep 0; }