Метод acquire класса Lock
Метод acquire класса Lock пытается получить блокировку ресурса.
Первым необязательным параметром передаётся флаг blocking,
который указывает, нужно ли ждать освобождения блокировки.
Метод возвращает true, если блокировка успешно получена,
и false в противном случае.
Синтаксис
public function acquire(bool $blocking = false): bool
Пример
Давайте создадим блокировку и попробуем её получить:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Routing\Attribute\Route;
class LockController extends AbstractController
{
#[Route('/lock', name: 'lock_index')]
public function index(LockFactory $factory): Response
{
$lock = $factory->createLock('resource');
$res = $lock->acquire();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
true
Пример
Давайте попробуем получить блокировку, которая уже занята:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Routing\Attribute\Route;
class LockController extends AbstractController
{
#[Route('/lock', name: 'lock_index')]
public function index(LockFactory $factory): Response
{
$lock = $factory->createLock('resource');
$lock->acquire();
$res = $lock->acquire();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
false
Пример
Давайте передадим флаг blocking, чтобы дождаться освобождения блокировки:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Routing\Attribute\Route;
class LockController extends AbstractController
{
#[Route('/lock', name: 'lock_index')]
public function index(LockFactory $factory): Response
{
$lock = $factory->createLock('resource');
$lock->acquire();
$lock->release();
$res = $lock->acquire(true);
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
true
Смотрите также
-
класс
Lock,
который управляет блокировкой ресурсов -
метод
release,
который освобождает блокировку ресурса -
метод
isAcquired,
который проверяет, получена ли блокировка -
метод
refresh,
который продлевает время жизни блокировки