Функция предназначена для создания мютекса. Поле 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
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);