tn_mutex_lock_polling()

Функция предназначена для захвата мютекса без блокировки задачи. Если мютекс еще не заблокирован, он блокируется. Если мютекс заблокирован, сервис возвращает код ошибки TERR_TIMEOUT.

Если задача заблокировала мютекс ранее, сервис возвращает код ошибки TERR_ILUSE. Так же этот код возвращается в том случае, если задача пытается блокировать мютекс с протоколом увеличения приоритета (Priority Ceiling Protocol) и ее приоритет выше порога, заданного при создании мютекса.

Вызов:

TN_RETVAL tn_mutex_lock_polling(TN_MUTEX *mutex);

Разрешен вызов:

В контексте задачи

Параметры функции:

mutex
указатель на структуру блокируемого мютекса


Возвращаемые значения:

TERR_WRONG_PARAM
некорректное значение параметра (замечание: данный код возврата возможен только в случае использования сервисов с проверкой параметров)
TERR_NOEXS
попытка блокировки несуществующего мютекса
TERR_WCONTEXT
попытка блокировки мютекса из обработчика прерывания или пользовательской критической секции
TERR_ILUSE
мютекс уже заблокирован задачей, вызвавшей сервис
мютекс использует протокол увеличения приоритета, а задача, пытающаяся заблокировать его имеет приоритет выше порогового
TERR_TIMEOUT
мютекс уже заблокирован другой задачей
TERR_NO_ERR
успешное выполнение


Пример вызова:

TN_MUTEX mutex_test;
 
if (tn_mutex_lock_polling(&mutex_test) == TERR_NO_ERR)
{
    /* успешная попытка блокировки мютекса */
}



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