tn_mutex_create()

Функция предназначена для создания мютекса. Поле id_mutex структуры mutex должно быть равно нулю до момента создания мютекса. Таким образом уже созданные мютексы защищаются от повторного создания.

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

Параметр attribute указывает тип протокола обхода инверсии приоритетов: TN_MUTEX_ATTR_CEILING - если используется протокол увеличения приоритета или TN_MUTEX_ATTR_INHERIT, если используется протокол наследования приоритета.

Если параметр attribute равен TN_MUTEX_ATTR_CEILING, необходимо указать параметр ceil_priority - максимальный приоритет из задач, который могут владеть мютексом. Если же используется протокол наследования приоритета, то параметр ceil_priority игнорируется.

Вызов:

TN_RETVAL tn_mutex_create(TN_MUTEX *mutex, TN_UWORD attribute, TN_UWORD ceil_priority);

Разрешен вызов:

В контексте задачи, в прерывании, в пользовательской критической секции

Параметры функции:

mutex
указатель на структуру мютекса типа TN_MUTEX. Структура должна быть создана до момента вызова функции, статически или динамически
attribute
тип протокола обхода инверсии приоритетов, используемый мютексом. Параметр может принимать одно из двух значений:

TN_MUTEX_ATTR_CEILING Используется протокол увеличения приоритета
TN_MUTEX_ATTR_INHERIT Используется протокол наследования приоритета

ceil_priority
максимальный приоритет из всех задач, которые могут владеть мютексом. Допустим, мютексом могут владеть задачи с приоритетом 3, 4, 9 и 2. Максимальный приоритет - 2. Параметр игнорируется, если attribute = TN_MUTEX_ATTR_INHERIT

Возвращаемые значения:

TERR_WRONG_PARAM
некорректное значение параметра (замечание: данный код возврата возможен только в случае использования сервисов с проверкой параметров)
TERR_EXS
попытка создания мютекса, который уже создан
TERR_NO_ERR
успешное выполнение


Пример вызова:

TN_MUTEX mutex_test;
 
/* Создается мютекс с протоколом увеличения приоритета.
   Максимальный приоритет из задач, которые используют мютекс равен 2
 */
 
tn_mutex_create(&mutex_test, TN_MUTEX_ATTR_CEILING, 2);



К списку сервисов