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

Метод 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,
    который продлевает время жизни блокировки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить