Name
    IPC::SRLock - Set/reset locking semantics to single thread processes

Version
    This documents version v0.19.$Rev: 1 $ of IPC::SRLock

Synopsis
       use IPC::SRLock;

       my $config   = { tempdir => 'path_to_tmp_directory', type => 'fcntl' };

       my $lock_obj = IPC::SRLock->new( $config );

       $lock_obj->set( k => 'some_resource_identfier' );

       # This critical region of code is guaranteed to be single threaded

       $lock_obj->reset( k => 'some_resource_identfier' );

Description
    Provides set/reset locking methods which will force a critical region of
    code to run single threaded

    Implements a factory pattern, three implementations are provided. The
    LCD option IPC::SRLock::Fcntl which works on non Unixen,
    IPC::SRLock::Sysv which uses System V IPC, and IPC::SRLock::Memcached
    which uses "libmemcache" to implement a distributed lock manager

Configuration and Environment
    Defines the following attributes;

    "debug"
       Mutable attribute if true will log lock set events at the debug level

    "type"
       Determines which factory subclass is loaded. Defaults to "fcntl", can
       be; "fcntl", "memcached", or "sysv"

Subroutines/Methods
  BUILDARGS
    Extracts the "type" attribute from those passed to the factory subclass

  BUILD
    Called after an instance is created this subroutine triggers the lazy
    evaluation of the concrete subclass

  get_table
       my $data = $lock_obj->get_table;

    Returns a hash ref that contains the current lock table contents. The
    keys/values in the hash are suitable for passing to HTML::FormWidgets

  list
       my $array_ref = $lock_obj->list;

    Returns an array of hash refs that represent the current lock table

  reset
       $lock_obj->reset( k => 'some_resource_key' );

    Resets the lock referenced by the "k" attribute.

  set
       $lock_obj->set( k => 'some_resource_key' );

    Sets the specified lock. Attributes are:

    "k"
       Unique key to identify the lock. Mandatory no default

    "p"
       Explicitly set the process id associated with the lock. Defaults to
       the current process id

    "t"
       Set the time to live for this lock. Defaults to five minutes. Setting
       it to zero makes the lock last indefinitely

Diagnostics
    Setting "debug" to true will cause the "set" methods to log the lock
    record at the debug level

Dependencies
    File::DataClass
    Moo
    Type::Tiny

Incompatibilities
    The "sysv" subclass type will not work on "MSWin32" and "cygwin"
    platforms

Bugs and Limitations
    Testing of the "memcached" subclass type is skipped on all platforms as
    it requires "memcached" to be listening on the localhost's default
    memcached port "localhost:11211"

    There are no known bugs in this module. Please report problems to the
    address below. Patches are welcome

Author
    Peter Flanigan, "<pjfl@cpan.org>"

License and Copyright
    Copyright (c) 2013 Peter Flanigan. All rights reserved

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself. See perlartistic

    This program is distributed in the hope that it will be useful, but
    WITHOUT WARRANTY; without even the implied warranty of MERCHANTABILITY
    or FITNESS FOR A PARTICULAR PURPOSE

