NAME

IPC::Notify

SYNOPSIS

# Process 1- waits to be notified and then performs work
my $notify = IPC::Notify->new("/path/to/lock");
$notify->lock;
for (;;) {
  $notify->wait;
  # do work
  print "I am doing some work!\n";
}
$notify->unlock;

# Process 2- wakes up process 1
my $notify = IPC::Notify->new("/path/to/lock");
$notify->lock;
$notify->notify;
$notify->unlock;

CONSTRUCTOR

new() - create a new notify locking object

my $notify = IPC::Notify->new($filename);

METHODS

is_locked() - check whether object is currently "locked"

if ($notify->is_locked) { ... }

Returns nonzero if the object is currently locked.

lock() - obtain a file lock

$notify->lock;

A lock must be acquired before using wait() or notify() on this object. This ensures proper synchronization. This method will block if another (non-waiting) process has the lock.

notify() - wake up all processes waiting on this lock

$notify->notify;

This will wake up all processes waiting on the lock, however, you need to call unlock() from the notifying process before the other process(es) will be allowed to proceed.

wait() - wait for a notification on this lock

$notify->wait($timeout_in_seconds);

This method will atomically give up the lock this process has on the object and wait for a notification. Before returning control, it will re-acquire the lock.

If $timeout_in_seconds is specified, wait() will return control early if a notification is not received within the specified time. Fractional values are acceptable.

If $timeout_in_seconds is absent, or "undef", then it will wait forever. If $timeout_in_seconds is zero, the call will be nonblocking. (It will simply indicate whether a notification has been received.)

The result is nonzero if a notification was received. Otherwise, the timeout had elapsed.

unlock() - release a lock

$notify->unlock;

Be sure to unlock() if you are going to do some other work. As long as one process holds the lock, other processes will block to notify().