Компонент Мьютекс

Содержание

Описание

Занимает или освобождает критическую секцию на текущем сайте. Применяется для блокирования произвольной операции (например чтение и модификация сайтовой или глобальной переменной) от одновременного выполнения в разных экземплярах сценариев и связанных с этим вредных мутаций. Может использоваться как альтернатива транзакциям.

Компонент приостанавливает выполнение сценария до тех пор пока не будет выдана инициатива, подтверждающая захват именованной критической секции.
Ожидание захвата может быть прервано по таймауту, при этом происходит отказ от захвата.

Критическая секция будет удерживаться до одного из событий:
а) выполнение освобождения секции в этом же сценарии таким же компонентом с действием "Освободить";
б) плановым или внеплановым завершением обработчика сценария;
в) истеканием времени гарантированного освобождения, заданного в параметрах компонента.
г) перезагрузкой ноды или сервера, исполняющего сценарий.

Реализация компонента ограничивает применение рамками одного сайта. Критическая секция не имеет привязки к доменам, конкретным серверам и сценариям. Для введения таковых привязок следует формировать ключ с применением названия соответствующего домена и/или сервера.

Table 1. Системные характеристики

Индекс

147

Краткое название

mutex

Типы сценариев

Все

Стартовый модуль

r_script_component_mutex

Режим

Асинхронный

Иконка

147

Характер разветвления

Разветвляющий, замыкающий

Свойства

Table 2. Свойства
Спецификация Описание

Название: Ключ
Код: key
Усл. видимости: нет
По умолчанию: — 

Аргумент, содержащий имя критической секции.

Название: Действие
Код: action
Усл. видимости: нет
По умолчанию: Захватить

Выбор действия над критической секцией.
Возможные значения:

  • Заблокировать (lock, 1) – Дождаться очереди и захватить критическую секцию.

  • Освободить (unlock, 2) – Освободить критическую секцию.

Название: Тип операции
Код: mode
Усл. видимости: да
По умолчанию: write

Выбор типа блокируемой операции.
Операции чтения могут взаимно не блокироваться (например узнать значение глобальной переменной), однако операции изменения (сначала взятие значения глобальной переменной, потом преобразование и затем сохранение глобальной переменной) требуют полной блокировки критической секции.
Возможные значения:

  • read (read, 1) – Операция чтения. Все операции чтения получают одновременный доступ до тех пор, пока в очередь не встанет операция записи.

  • write (write, 2) – Операция записи. Любая операция записи получает индивидуальную блокировку критической секции под процесс обработчика сценария.

Применяется для захвата.

Название: Время ожидания, мс
Код: timeoutMs
Усл. видимости: да
По умолчанию: 1000

Аргумент, содержащий таймаут в миллисекундах, после истечения которого ожидание захвата следует прекратить. Управление возвращается по ветке таймаута.
Применяется для захвата`.

Название: Гарантированное время освобождения, мс
Код: autoUnlockTimeoutMs
Усл. видимости: да
По умолчанию: 1000

Аргумент, содержащий время удержания блокировки в миллисекундах, по истечении которого критическая секция гарантированно освободится без ожидания других событий.
Применяется для захвата.

Название: Ошибка в переменную
Код: errorVar
Усл. видимости: да
По умолчанию: — 

Переменная для сохранения текста ошибки в случае неудачи захвата.

Название: Переход
Код: transfer
Усл. видимости: нет
По умолчанию: — 

Компонент, которому передается управление при успешном завершении операции.

Название: Переход, время
Код: transferTimeout
Усл. видимости: нет
По умолчанию: — 

Компонент, которому передается управление по истечении таймауте ожидания результата операции.

Название: Переход, ошибка
Код: transferError
Усл. видимости: нет
По умолчанию: — 

Компонент, которому передается управление в случае возникновения ошибки.