Download the PHP package chrisharrison/lock without Composer
On this page you can find all versions of the php package chrisharrison/lock. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download chrisharrison/lock
More information about chrisharrison/lock
Files in chrisharrison/lock
Package lock
Short Description Avoid simultaneous execution of PHP code by first gaining a lock.
License MIT
Informations about the package lock
lock
Avoid simultaneous execution of PHP code by first gaining a lock.
Installation
Through Composer, obviously:
Why?
If you have code that will potentially cause an unwanted race condition when two parallel processed run it at the same time, you may want to introduce a lock so that only one process can execute that code while others wait.
Usage
First create a LockGuard
:
$maxAttempts
:int
Maximum number of attempts to gain a lock before it gives up.$attemptIntervalSeconds
:int
Number of seconds between attempts to gain a lock$lockDriver
:LockDriver
An instance of a class which deals with persisting the lock to whatever storage mechanism$lockInspector
:LockInspector
An instance of a class which deals with testing validity of a lock
Once you've create a LockGuard
you can use it to protect code within a lock:
The above will attempt to set $flag
to true
.
If there is a lock that hasn't expired and was not created by the same process (identified by $uniqueProcessId
) then the code will execute and the method will return true
. Else false
.
As soon as the code has been successfully executed, the lock will be released. This happens even if the $lockUntil
time has not been reached. However if the code hasn't completed after the $lockUntil
time has been reached then the lock will expire and other processes can execute again. This is to mitigate situations where a lock is never released.
Typical usage
The FilesystemLockDriver
persists the lock as JSON to a file using the local filesystem.
You could create other LockDriver
s that use other methods, such as FlySystem to make use of S3.