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);



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