use warnings; use threads; use threads::shared; my $tn = 5; my @trl = (); my $start : shared = 1; my $end = 4000; for(0..$tn-1) { $trl[$_] = threads->create(\&func, $_) } for(@trl) { $_->join } sub func { while($start < $end) { {lock($start); $start++;} print $start."\n"; } }