#! /usr/bin/perl use strict; use Win32::Semaphore; use Win32::MMF::Shareable; $|++; my $delay = 0.01; my $i = 0; if( fork ) { my %share; my $ns = tie( %share, 'Win32::MMF::Shareable', 'share' ) || die; print $ns->namespace()->{_view}, "\n"; my $sem = Win32::Semaphore->new(1,1,'sig'); select( undef, undef, undef, $delay / 2 ); while( $i < 20 ) { $sem->wait; $share{ 'P' . $i++ } = '-'; # $ns->lock(); print "parent($i): " . join( '', values( %share ) ) . "\n"; # $ns->unlock(); $sem->release(); select( undef, undef, undef, $delay ); } } else { my %share; my $ns = tie( %share, 'Win32::MMF::Shareable', 'share' ) || die; print $ns->namespace()->{_view}, "\n"; my $sem = Win32::Semaphore->new(1,1,'sig'); while( $i < 20 ) { $sem->wait; $share{ 'P' . $i++ } = '#'; # $ns->lock(); print "child($i) : " . join( '', values( %share ) ) . "\n"; # $ns->unlock(); $sem->release(); select( undef, undef, undef, $delay ); } }