in reply to Avoid Locking Entire Hashes
The lock doesn't have to the be on the variable you are changing, so create a hash of mutexes.
my %h : shared; my %mutexes : shared; sub get_mutex { my ($k) = @_; my $mutex_ref = $mutexes{$k}; return $mutex_ref if $mutex_ref; lock($mutexes); my $new_mutex : shared; return $mutexes{$k} ||= \$new_mutex; } sub safe_set { my ($k, $v) = @_; lock ${ get_mutex($k) }; $h{$k} = $v; }
Update: Fixed error mentioned in reply.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Avoid Locking Entire Hashes
by jagan_1234 (Sexton) on Jun 13, 2011 at 21:25 UTC | |
by BrowserUk (Patriarch) on Jun 14, 2011 at 06:13 UTC | |
by jagan_1234 (Sexton) on Jun 14, 2011 at 22:59 UTC | |
by BrowserUk (Patriarch) on Jun 15, 2011 at 08:09 UTC | |
by BrowserUk (Patriarch) on Jun 15, 2011 at 04:22 UTC | |
by ikegami (Patriarch) on Jun 15, 2011 at 04:26 UTC | |
| |
by jagan_1234 (Sexton) on Jun 15, 2011 at 17:45 UTC | |
by BrowserUk (Patriarch) on Jun 15, 2011 at 18:27 UTC | |
by jagan_1234 (Sexton) on Jun 15, 2011 at 20:35 UTC | |
| |
by ikegami (Patriarch) on Jun 15, 2011 at 18:29 UTC | |
by ikegami (Patriarch) on Jun 13, 2011 at 21:48 UTC |