~~NOTOC~~
===== 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'' : тип протокола обхода инверсии приоритетов, используемый мютексом. Параметр может принимать одно из двух значений:
{| class = "fpl"
|-
| ''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);
\\
----
[[tnkernel:ref:mutex:intro#Сервисы управления мютексами|К списку сервисов]]