Метод createLock
Метод createLock класса LockFactory создаёт
объект Lock, связанный с определённым ресурсом.
Первым параметром передаётся имя ресурса в виде строки,
вторым - флаг блокировки (например, Lock::EXCLUSIVE).
Полученный объект затем используется для захвата и
освобождения блокировки.
Синтаксис
public function createLock(string $resource, bool $shared = false): LockInterface
Пример
Давайте создадим блокировку для ресурса 'article' и захватим её:
<?php
namespace AppService;
use SymfonyComponentLockLockFactory;
class ArticleLock
{
public function __construct(private LockFactory $lockFactory)
{
}
public function run(): bool
{
$lock = $this->lockFactory->createLock('article');
if (!$lock->acquire()) {
return false;
}
// critical section
$lock->release();
return true;
}
}
?>
Результат выполнения метода run:
true
Пример
Давайте создадим разделяемую блокировку, передав вторым
параметром true:
<?php
namespace AppService;
use SymfonyComponentLockLockFactory;
class ArticleLock
{
public function __construct(private LockFactory $lockFactory)
{
}
public function run(): string
{
$lock = $this->lockFactory->createLock('user', true);
if ($lock->acquire()) {
return 'acquired';
}
return 'busy';
}
}
?>
Результат выполнения метода run:
"acquired"
Пример
Давайте создадим блокировку с автоматическим
освобождением через параметр $autoRelease
и зададим время жизни:
<?php
namespace AppService;
use SymfonyComponentLockLockFactory;
class ArticleLock
{
public function __construct(private LockFactory $lockFactory)
{
}
public function run(): bool
{
$lock = $this->lockFactory->createLock(
'article',
false,
30.0,
true
);
return $lock->acquire();
}
}
?>
Результат выполнения метода run:
true
Смотрите также
-
класс
LockFactory,
который создаёт объекты блокировок -
класс
Lock,
который представляет саму блокировку -
метод
acquire,
который захватывает блокировку -
метод
release,
который освобождает блокировку