#!/usr/bin/perl -w # # Test of shared hashes courtesy Joe Thomas use strict; use IPC::Shareable; use vars qw($counter %hash); tie %hash, 'IPC::Shareable', undef, {create => 'yes', destroy => 'yes'}; tie $counter, 'IPC::Shareable', undef, {create => 'yes', destroy => 'yes'}; $| = 1; for (my $i = 0; $i < 3; $i++) { sleep 1; next if fork(); hashcount(3, 3); exit; } while (1) { last if wait() == -1; } sub hashcount { my ($loops, $sleeptime) = @_; for (my $i = 0; $i < $loops; $i++) { (tied $counter)->shlock; (tied %hash)->shlock; $hash{++$counter} = $$; print "Process $$ sees:\n"; for my $key (sort keys %hash) { print "\$hash{$key} = $hash{$key}\n"; } (tied %hash)->shunlock; (tied $counter)->shunlock; sleep $sleeptime; } } exit; __END__