Функция предназначена для блокировки мютекса. Если мютекс еще не заблокирован, он блокируется и задача, которая вызвала сервис не переводится в состояние ожидания. Если мютекс заблокирован, задача переводится в состояние 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);