MCE::Mutex->new()MCE::Mutex->new(impl=>"Channel")MCE::Mutex->new(impl=>"Flock",[path=>"/tmp/file.lock"])MCE::Mutex->new(path=>"/tmp/file.lock")
Creates a new mutex.
Channel locking (the default), unless "path" is given, is through a pipe or socket depending on the
platform. The advantage of channel locking is not having to re-establish handles inside new processes and
threads.
For Fcntl-based locking, it is the responsibility of the caller to remove the "tempfile", associated with
the mutex, when path is given. Otherwise, it establishes a "tempfile" internally including removal on
scope exit.
$mutex->impl(void)
Returns the implementation used for the mutex.
$m1 = MCE::Mutex->new( );
$m1->impl(); # Channel
$m2 = MCE::Mutex->new( path => /tmp/my.lock );
$m2->impl(); # Flock
$m3 = MCE::Mutex->new( impl => "Channel" );
$m3->impl(); # Channel
$m4 = MCE::Mutex->new( impl => "Flock" );
$m4->impl(); # Flock
Current API available since 1.822.
$mutex->lock(void)$mutex->lock_exclusive(void)
Attempts to grab an exclusive lock and waits if not available. Multiple calls to mutex->lock by the same
process or thread is safe. The mutex will remain locked until mutex->unlock is called.
The method "lock_exclusive" is an alias for "lock", available since 1.822.
( my $mutex = MCE::Mutex->new( path => $0 ) )->lock_exclusive;
$mutex->lock_shared(void)
Like "lock_exclusive", but attempts to grab a shared lock instead. The "lock_shared" method is an alias
to "lock" otherwise for non-Fcntl implementations.
Current API available since 1.822.
$guard=$mutex->guard_lock(void)
This method calls "lock" and returns a guard object. When the guard object is destroyed, it automatically
calls "unlock".
Current API available since 1.889.
$mutex->unlock(void)
Releases the lock. A held lock by an exiting process or thread is released automatically.
$mutex->synchronize(sub{...},@_)$mutex->enter(sub{...},@_)
Obtains a lock, runs the code block, and releases the lock after the block completes. Optionally, the
method is "wantarray" aware.
my $val = $mutex->synchronize( sub {
# access shared resource
return 'scalar';
});
my @ret = $mutex->enter( sub {
# access shared resource
return @list;
});
The method "enter" is an alias for "synchronize", available since 1.822.
$mutex->timedwait(floating_seconds)
Blocks until obtaining an exclusive lock. A false value is returned if the timeout is reached, and a true
value otherwise. The default is 1 second.
my $mutex = MCE::Mutex->new( path => $0 );
# terminate script if a previous instance is still running
exit unless $mutex->timedwait( 2 );
...
Current API available since 1.822.