#Create a mutex object
use Win32::Mutex;
sub CriticalSection
{
print"In Critical section @_\n";
sleep rand(4);
print"Exiting Critical section @_\n";
}
sub EnterArea
{
local( $mut ) = shift(@_);
do
{
$result= $mut->Wait(60000);
if($result)
{
$Error=Win32::FormatMessage Win32::GetLastError;
printf( "Waiting for Mutex: Result=$result Error $Error");
}
}
while($result);
print "Ready for access\n";
#access away!!!
&CriticalSection(@_);
$result=$mut->Release();
if(!$result)
{
$Error=Win32::FormatMessage Win32::GetLastError;
printf( "Releasing Mutex: Result=$result Error $Error");
die;
}
}
$result=Win32::Mutex::Create( $mut,0, "Mutex");
if( Win32::GetLastError)
{
$Error=Win32::FormatMessage Win32::GetLastError;
printf("Creating Mutex: Result=$result Error $Error");
printf("Opening Mutex\n");
$result=Win32::Mutex::Open( $mut, "Mutex");
$lasterror=Win32::GetLastError;
$Error=Win32::FormatMessage $lasterror;
print "Opening Mutex: Result=$result $mut Error $Error";
!$lasterror || die "Error Opening Mutex $Error";
}
else
{
printf("Created Mutex\n");
}
#Use it
for($i=1;$i<10;$i++)
{
&EnterArea($mut,$i);
#print"\nPress Enter to Continue...";
sleep rand(4);
#print"\n";
}
               (
geocities.com/siliconvalley/park)                   (
geocities.com/siliconvalley)