>perl lockdemo.pl
locker: flock LOCK_EX
locker: locked
locker: sleep 10
main: alarm 5
main: flock LOCK_EX ### The lock is acquired here
main: timeout at lockdemo.pl line 30. ### before the timeout occurs.
main: 5 seconds have passed
locker: flock LOCK_UN
locker: unlocked
####
sub locker
{
my $start=time();
open my $h,'>>','tempfile.tmp';
say 'locker: flock LOCK_EX';
flock($h,LOCK_EX);
say 'locker: locked';
say 'locker: sleep 10';
sleep 10;
say 'locker: flock LOCK_UN';
flock($h,LOCK_UN);
say 'locker: unlocked';
close $h;
my $stop=time();
say 'locker ran for ',$stop-$start,' seconds';
}
##
##
>perl lockdemo-timed.pl
locker: flock LOCK_EX
locker: locked
locker: sleep 10
main: alarm 5
main: flock LOCK_EX
main: timeout at lockdemo-timed.pl line 30.
main: 5 seconds have passed
locker: flock LOCK_UN
locker: unlocked
locker ran for 10 seconds
>
##
##
H:\tmp\lockdemo>perl lockdemo-timed.pl
locker: flock LOCK_EX
locker: locked
locker: sleep 10
main: alarm 5
main: flock LOCK_EX
locker: flock LOCK_UN
main: alarm 0
main: successfully locked
main: 9 seconds have passed
locker: unlocked
locker ran for 10 seconds
H:\tmp\lockdemo>
##
##
sub locker
{
$SIG{'ALRM'}='IGNORE';
my $start=time();
open my $h,'>>','tempfile.tmp';
say 'locker: flock LOCK_EX';
flock($h,LOCK_EX);
say 'locker: locked';
say 'locker: sleep 10 using select';
select(undef,undef,undef,10);
say 'locker: flock LOCK_UN';
flock($h,LOCK_UN);
say 'locker: unlocked';
close $h;
my $stop=time();
say 'locker ran for ',$stop-$start,' seconds';
}
##
##
>perl lockdemo-select.pl
locker: flock LOCK_EX
locker: locked
locker: sleep 10 using select
main: alarm 5
main: flock LOCK_EX
main: timeout at lockdemo-select.pl line 30.
main: 5 seconds have passed
locker: flock LOCK_UN
locker: unlocked
locker ran for 10 seconds
>
##
##
H:\tmp\lockdemo>perl lockdemo-select.pl
locker: flock LOCK_EX
locker: locked
locker: sleep 10 using select
main: alarm 5
main: flock LOCK_EX
locker: flock LOCK_UN
main: alarm 0
main: successfully locked
main: 9 seconds have passed
locker: unlocked
locker ran for 10 seconds
H:\tmp\lockdemo>
##
##
sub locker
{
$SIG{'ALRM'}=sub { warn "*** ALARM ***" };
my $start=time();
open my $h,'>>','tempfile.tmp';
say 'locker: flock LOCK_EX';
flock($h,LOCK_EX);
say 'locker: locked';
say 'locker: sleep 10 using select';
select(undef,undef,undef,10);
say 'locker: flock LOCK_UN';
flock($h,LOCK_UN);
say 'locker: unlocked';
close $h;
my $stop=time();
say 'locker ran for ',$stop-$start,' seconds';
}
##
##
>perl lockdemo-signal.pl
locker: flock LOCK_EX
locker: locked
locker: sleep 10 using select
main: alarm 5
main: flock LOCK_EX
main: timeout at lockdemo-signal.pl line 30.
main: 5 seconds have passed
locker: flock LOCK_UN
locker: unlocked
locker ran for 10 seconds
>