Метод release класса Lock
Метод release класса Lock снимает блокировку,
установленную ранее методом acquire. После вызова
блокировка становится свободной, и её может захватить
другой процесс. Если блокировка не была установлена,
метод просто ничего не делает.
Синтаксис
public function release(): void
Пример
Давайте создадим блокировку через фабрику и снимем её методом release:
<?php
namespace AppService;
use SymfonyComponentLockLockFactory;
class LockService
{
public function __construct(
private LockFactory $lockFactory,
) {
}
public function run(): void
{
$lock = $this->lockFactory->createLock('report');
$lock->acquire();
echo $lock->isAcquired() ? "acquired" : "not acquired";
$lock->release();
echo $lock->isAcquired() ? "acquired" : "not acquired";
}
}
?>
Результат выполнения кода:
"acquirednot acquired"
Пример
Давайте снимем блокировку и попробуем захватить её повторно в том же процессе:
<?php
namespace AppService;
use SymfonyComponentLockLockFactory;
class LockService
{
public function __construct(
private LockFactory $lockFactory,
) {
}
public function run(): void
{
$lock = $this->lockFactory->createLock('report');
$lock->acquire();
$lock->release();
$res = $lock->acquire();
echo $res ? "acquired again" : "not acquired";
$lock->release();
}
}
?>
Результат выполнения кода:
"acquired again"
Пример
Давайте вызовем release у блокировки, которая не была захвачена:
<?php
namespace AppService;
use SymfonyComponentLockLockFactory;
class LockService
{
public function __construct(
private LockFactory $lockFactory,
) {
}
public function run(): void
{
$lock = $this->lockFactory->createLock('report');
$lock->release();
$res = $lock->isAcquired();
echo $res ? "acquired" : "not acquired";
}
}
?>
Результат выполнения кода:
"not acquired"
Смотрите также
-
класс
Lock,
который управляет блокировками -
метод
acquire,
который захватывает блокировку -
метод
isAcquired,
который проверяет, захвачена ли блокировка -
метод
refresh,
который продлевает время жизни блокировки