~~NOTOC~~ ===== tn_mutex_lock() ===== Функция предназначена для блокировки мютекса. Если мютекс еще не заблокирован, он блокируется и задача, которая вызвала сервис не переводится в состояние ожидания. Если мютекс заблокирован, задача переводится в состояние ''WAITING'' и ставится в очередь задач, ожидающих освобождение мютекса. Параметр ''timeout'' задает время ожидания мютекса в системных тиках. Если в течении этого времени мютекс не будет захвачен задачей, она удаляется из очереди ожидающих и переводится в состояние готовых к выполнению. Если значение параметра ''timeout'' равно ''TN_WAIT_INFINITE'', то задача будет ожидать мютекс до тех пор, пока он не освободиться. Если задача заблокировала мютекс ранее, сервис возвращает код ошибки ''TERR_ILUSE''. Так же этот код возвращается в том случае, если задача пытается блокировать мютекс с протоколом увеличения приоритета (Priority Ceiling Protocol) и ее приоритет выше порога, заданного при создании мютекса. **Вызов:** TN_RETVAL tn_mutex_lock(TN_MUTEX *mutex, TN_TIMEOUT timeout); **Разрешен вызов:** \\ В контексте задачи **Параметры функции:** ; ''mutex'' : указатель на структуру блокируемого мютекса ; ''timeout'' : таймаут в течении которого задача ожидает освобождения мютекса \\ **Возвращаемые значения:** ; ''TERR_WRONG_PARAM'' : некорректное значение параметра (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров) ; ''TERR_NOEXS'' : попытка блокировки несуществующего мютекса ; ''TERR_WCONTEXT'' : попытка блокировки мютекса из обработчика прерывания или пользовательской критической секции ; ''TERR_ILUSE'' : мютекс уже заблокирован задачей, вызвавшей сервис : мютекс использует протокол увеличения приоритета, а задача, пытающаяся заблокировать его имеет приоритет выше порогового ; ''TERR_TIMEOUT'' : выход из сервиса по таймауту ; ''TERR_NO_ERR'' : успешное выполнение \\ **Пример вызова:** TN_MUTEX mutex_test; tn_mutex_lock(&mutex_test, 10); \\ ---- [[tnkernel:ref:mutex:intro#Сервисы управления мютексами|К списку сервисов]]