use v5.8.0; use strict; use warnings; use threads; use threads::shared; { my $count = 100_000; my $threads = 4; my $sum : shared = 0; sub inc { for (1..$count) { ++$sum; } } $_->join for map { threads->create( \&inc ) } 0..$threads-1; print("++s sum = $sum (expecting " . ($count*$threads). ")\n"); } { my $count = 100_000; my $threads = 4; my $sum : shared = 0; sub inc_assign { for (1..$count) { $sum += 1; } } $_->join for map { threads->create( \&inc_assign ) } 0..$threads-1; print("s+=1 sum = $sum (expecting " . ($count*$threads). ")\n"); } { my $count = 100_000; my $threads = 4; my $content : shared = ''; sub append { my ($letter) = @_; for (1..$count) { $content .= $letter; } } $_->join for map { threads->create( \&append, chr(ord('a')+$_) ) } 0..$threads-1; print("c.=l length = " . length($content) . " (expecting " . ($count*$threads). ")\n"); } { my $count = 100_000; my $threads = 4; my $content : shared = ''; sub concatenate { my ($letter) = @_; for (1..$count) { $content = $content . $letter; } } $_->join for map { threads->create( \&concatenate, chr(ord('a')+$_) ) } 0..$threads-1; print("c=c.l length = " . length($content) . " (expecting " . ($count*$threads). ")\n"); }