1. Go to this page and download the library: Download petrknap/critical-section library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
petrknap / critical-section example snippets
use PetrKnap\CriticalSection\CriticalSection;
use Symfony\Component\Lock\NoLock;
$lock = new NoLock();
$criticalOutput = CriticalSection::withLock($lock)(fn () => 'This was critical.');
var_dump($criticalOutput);
use PetrKnap\CriticalSection\CriticalSection;
use Symfony\Component\Lock\NoLock;
$lockA = new NoLock();
$lockB = new NoLock();
$criticalOutput = CriticalSection::withLock($lockA)->withLock($lockB)(fn () => 'This was critical.');
var_dump($criticalOutput);
use PetrKnap\CriticalSection\CriticalSection;
use Symfony\Component\Lock\NoLock;
$lockA = new NoLock();
$lockB = new NoLock();
$criticalOutput = CriticalSection::withLocks([$lockA, $lockB])(fn () => 'This was critical.');
var_dump($criticalOutput);
namespace PetrKnap\CriticalSection;
use Symfony\Component\Lock\NoLock;
/** @param Locked<Some\Resource> $resource */
function f(LockedResource $resource) {
echo $resource->value;
}
$lock = new NoLock();
$resource = LockableResource::of(new Some\Resource('data'), $lock);
CriticalSection::withLock($lock)(fn () => f($resource));
/** @var PetrKnap\CriticalSection\CriticalSectionInterface $criticalSection */
/** @var Doctrine\DBAL\Connection $connection */
$criticalSection(
fn () => $connection->transactional(
fn () => 'This was critical on DB server.'
)
);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.