Функция предназначена для блокировки мютекса. Если мютекс еще не заблокирован, он блокируется и задача, которая вызвала сервис не переводится в состояние ожидания. Если мютекс заблокирован, задача переводится в состояние WAITING и ставится в очередь задач, ожидающих освобождение мютекса.
Параметр timeout задает время ожидания мютекса в системных тиках. Если в течении этого времени мютекс не будет захвачен задачей, она удаляется из очереди ожидающих и переводится в состояние готовых к выполнению. Если значение параметра timeout равно TN_WAIT_INFINITE, то задача будет ожидать мютекс до тех пор, пока он не освободиться.
Если задача заблокировала мютекс ранее, сервис возвращает код ошибки TERR_ILUSE. Так же этот код возвращается в том случае, если задача пытается блокировать мютекс с протоколом увеличения приоритета (Priority Ceiling Protocol) и ее приоритет выше порога, заданного при создании мютекса.
Вызов:
TN_RETVAL tn_mutex_lock(TN_MUTEX *mutex, TN_TIMEOUT timeout);
Разрешен вызов:
В контексте задачи
Параметры функции:
mutextimeout
Возвращаемые значения:
TERR_WRONG_PARAMTERR_NOEXSTERR_WCONTEXTTERR_ILUSETERR_TIMEOUTTERR_NO_ERR
Пример вызова:
TN_MUTEX mutex_test; tn_mutex_lock(&mutex_test, 10);