tn_sem_acquire()

Сервис предназначен для захвата семафора.

Если счетчик свободных ресурсов семафора больше нуля (семафор свободен), то задача, которая пытается захватить семафор продолжает выполнение, а счетчик ресурсов уменьшается на единицу.

Если счетчик свободных ресурсов семафора равен нулю (семафор захвачен), то задача, которая пытается захватить семафор ставится в конец очереди задач ожидающих семафор и переводится в состояние ожидания. Счетчик ресурсов семафора не меняется.

Параметр timeout задает время ожидания семафора в системных тиках. Если в течении этого времени семафор не будет захвачен задачей, она удаляется из очереди ожидающих семафор и переводится в состояние готовых к выполнению. Сервис возвращает значение TERR_TIMEOUT.

Если значение параметра timeout равно TN_WAIT_INFINITE, то будет ожидать семафор до тех пор, пока он не освободиться.

Вызов:

TN_RETVAL tn_sem_acquire (TN_SEM *sem, TN_TIMEOUT timeout);

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

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

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

sem
указатель на структуру семафора
timeout
таймаут в течение которого задача ожидает семафор


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

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


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

TN_SEM sem_test;
 
tn_sem_acquire(&sem_test, 10);



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