in reply to Re^3: Avoid Locking Entire Hashes
in thread Avoid Locking Entire Hashes
Neither it seems is ikegami's original suggestion:
#! perl -slw use strict; use Data::Dump qw[ pp ]; use Time::HiRes qw[ time ]; use List::Util qw[ shuffle ]; use threads; use threads::shared; our $START //= 'aaa'; our $END //= 'zzz'; my %sems :shared = map{ my $n :shared = 0; $_ => \$n } $START .. $END; my %hash :shared = map{ $_ => 0 } $START .. $END; my $start = time; $_->join for map{ async{ my @order = shuffle keys %hash; for ( @order ) { lock ${ $sems{ $_ } }; ++$hash{ $_ }; } } } 1 .. 4; printf "Lock scalar ref took %.3f seconds\n", time() - $start; my @fails = grep $_ != 4, values %hash; warn @fails . " fails\n" if @fails; __END__ C:\test>909437-3 Lock scalar ref took 2.937 seconds 2840 fails
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: Avoid Locking Entire Hashes
by ikegami (Patriarch) on Jun 15, 2011 at 04:26 UTC | |
by BrowserUk (Patriarch) on Jun 15, 2011 at 04:29 UTC | |
by ikegami (Patriarch) on Jun 15, 2011 at 04:45 UTC | |
by BrowserUk (Patriarch) on Jun 15, 2011 at 04:57 UTC | |
by ikegami (Patriarch) on Jun 15, 2011 at 05:14 UTC | |
| |
by ikegami (Patriarch) on Jun 15, 2011 at 04:33 UTC |