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