#! perl -slw use strict; use threads; use threads::shared; use Time::HiRes qw[ time ]; our $N //= 1e3; our $T //= 10; my %data :shared; $data{ $_ } = 0 for 1 .. $N; my $running :shared = 0; my @t = map{ async { my $tid = threads->tid; { lock $running; ++$running } printf STDERR "$tid: started: %d\n", time; for ( 1 .. 10 * $N ) { my $prop = int rand $N; ++$data{ $prop }; } { lock $running; --$running } printf STDERR "$tid: started: %d\n", time; }; } 1 .. $T; sleep 1; sleep 1 while $running; printf "Cheek memory usage";; $_->join for @t;