PHP Mutex Library

v0.1 2017-11-21 12:33 UTC

This package is auto-updated.

Last update: 2022-09-23 04:18:14 UTC



Denis Mitrofanov


composer require denismitr/mutex


Initialization with factory:

  • File lock
$lock = MutexFactory::fileLock(__FILE__); // or some other file name like /tmp/some-id
  • Semaphore lock (linux only)
$lock = MutexFactory::semaphoreLock(__FILE__); // or some other file name like /tmp/some-id
  • PRedis lock
$this->redis = new Client([
    'host' => 'localhost',
    'port' => 6379,
    'database' => 0,

$this->lock = MutexFactory::pRedisLock($this->redis, "some-key", 20);

This far only these types of locks are supported

Using the lock instances


// Do some critical stuff here


With closures

$lock->safe(function() {
    // Lock will be acuqired and released automatically
    // Do some critical stuff safely

Performing a check first

$lock->try(function() use ($room, $from, $to) {
    // e.g
    return $room->isFree($from, $to);
})->then(function() use ($room, $from, $to) {
    // e.g.
    // Lock is aquired automatically
    $room->book($from, $to);
})->fail(function() use ($user) {
    // this callback will fire if the condition in try closure fails
    // e.g.
    $user->notify("Room is not available for requested time period.");

Looping in the safe, locked mode

$lock->loop($timeoutInSeconds, function($loop, $i) ($user, $ads) {
    // lock is acquired and released automatically when loop is done
    // e.g. send out only 10 ads to user friends
    // Laravel collections example
    if ($i >= 10) {