РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1061 of 1361 menu

Класс LockFactory

Класс LockFactory создаёт объекты блокировок Lock для защиты общих ресурсов от одновременного доступа. Фабрика принимает хранилище блокировок (например, файловое, semaphore или Redis) и возвращает объект Lock через метод createLock. Первым параметром метода передаётся имя ресурса, а вторым - таймаут блокировки в секундах.

Синтаксис

use Symfony\Component\Lock\LockFactory; $factory = new LockFactory($store); $lock = $factory->createLock($resource, $ttl);

Пример

Давайте создадим фабрику блокировок с файловым хранилищем и получим блокировку для ресурса 'article':

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Lock\LockFactory; use Symfony\Component\Lock\Store\FlockStore; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(): Response { $store = new FlockStore(); $factory = new LockFactory($store); $lock = $factory->createLock('article'); if ($lock->acquire()) { $lock->release(); return new Response('lock acquired'); } return new Response('lock busy'); } } ?>

Результат выполнения кода:

lock acquired

Пример

Давайте используем сервис lock.factory через внедрение зависимости и заблокируем ресурс на 300 секунд:

<?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 ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(LockFactory $factory): Response { $lock = $factory->createLock('article', 300); if (!$lock->acquire()) { return new Response('lock busy'); } $lock->release(); return new Response('hello'); } } ?>

Результат выполнения кода:

hello

Смотрите также

  • метод createLock,
    который создаёт объект блокировки
  • класс Lock,
    который управляет блокировкой ресурса
  • метод acquire,
    который захватывает блокировку
  • метод release,
    который освобождает блокировку
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить