CloudCastle Lock API

FlockStore
in package
implements LockStore

FinalYes

Файловое хранилище блокировок на основе `flock`.

Каждый ресурс — отдельный lock-файл в каталоге (имя — SHA-256 от ключа, что исключает выход за каталог и недопустимые символы). Взаимное исключение между процессами обеспечивает ядро через flock(LOCK_EX): захват атомарен и межпроцессно надёжен.

Дескриптор lock-файла открывается лениво при первом обращении к ресурсу и переиспользуется между захватами: снятие блокировки освобождает flock, но не закрывает файл, поэтому повторный захват того же ресурса не платит за fopen/fclose — критично для «горячих» сценариев (воркер многократно берёт блокировку одного ресурса). Все дескрипторы закрываются в деструкторе.

flock-блокировка автоматически освобождается при завершении процесса-держателя (в т.ч. аварийном), поэтому «зависших навсегда» блокировок не остаётся и TTL не требуется — параметр срока жизни для этого хранилища игнорируется. В пределах одного процесса повторный захват уже удерживаемого ресурса запрещён (нереентерабельно): второй acquire() вернёт false.

Table of Contents

Interfaces

LockStore
Хранилище блокировок: единая абстракция над механизмами взаимного исключения (файловые `flock`, кэш с TTL, память процесса), поверх которой работает {@see \CloudCastle\Lock\Lock}.

Methods

__construct()  : mixed
__destruct()  : mixed
Закрыть все переиспользуемые дескрипторы lock-файлов.
acquire()  : bool
Попытаться захватить блокировку без ожидания (неблокирующе).
isAcquired()  : bool
Удерживается ли блокировка (любым владельцем) в данный момент.
refresh()  : bool
Продлить срок жизни блокировки, удерживаемой этим владельцем.
release()  : void
Снять блокировку, если она принадлежит этому владельцу.

Methods

__construct()

public __construct(string $directory) : mixed
Parameters
$directory : string

каталог для lock-файлов (создаётся при необходимости)

__destruct()

Закрыть все переиспользуемые дескрипторы lock-файлов.

public __destruct() : mixed

acquire()

Попытаться захватить блокировку без ожидания (неблокирующе).

public acquire(string $key, string $owner, int|null $ttlSeconds) : bool
Parameters
$key : string

ключ ресурса

$owner : string

уникальный токен владельца

$ttlSeconds : int|null

срок жизни в секундах для хранилищ с TTL; null — до явного снятия

Attributes
#[Override]
Return values
bool

true, если блокировка захвачена этим владельцем; false, если она уже удерживается кем-то другим

isAcquired()

Удерживается ли блокировка (любым владельцем) в данный момент.

public isAcquired(string $key) : bool
Parameters
$key : string

ключ ресурса

Attributes
#[Override]
Return values
bool

true, если ресурс заблокирован и блокировка не истекла

refresh()

Продлить срок жизни блокировки, удерживаемой этим владельцем.

public refresh(string $key, string $owner, int|null $ttlSeconds) : bool

flock не имеет TTL, поэтому продление сводится к подтверждению владения: блокировка удерживается до снятия или завершения процесса.

Parameters
$key : string

ключ ресурса

$owner : string

токен владельца

$ttlSeconds : int|null

новый срок жизни в секундах; null — бессрочно

Attributes
#[Override]
Return values
bool

true, если блокировка принадлежит владельцу и продлена

release()

Снять блокировку, если она принадлежит этому владельцу.

public release(string $key, string $owner) : void
Parameters
$key : string

ключ ресурса

$owner : string

токен владельца

Attributes
#[Override]
On this page

Search results