SyncSemWait(), SyncSemWait_r()

Ожидать на семафоре

Прототип:

#include <sys/neutrino.h>
int SyncSemWait( sync_t *sync,
int try );
int SyncSemWait_r( sync_t *sync,
int try );

Аргументы:

sync
Указатель на объект синхронизации sync_t.
try
Ненулевое значение говорит об условном ожидании.

Библиотека:

libc

Описание:

Системные вызовы SyncSemWait() и SyncSemWait_r() декрементируют семафор sync. Если значение семафора не превышает 0 и try равно 0, то вызывающий поток блокируется до тех пор, пока он не сможет декрементировать счетчик или вызов не будет прерван сигналом.

Эти функции эквивалентны, за исключением способа информирования об ошибках.


Note: Вместо явного использования системных вызовов следует рассмотреть функции sem_timedwait(), sem_trywait() или sem_wait().

Если try не равно 0, функция функционирует в логике условного ожидания: если вызов должен приводить к блокировке потока, то семафор не модифицируется и возвращается соответствующий код ошибки.

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

SyncSemWait()
Если возникла ошибка функция возвращает -1, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением (значение семафора успешно декрементировано).
SyncSemWait_r()
EOK возвращается при успешном завершении (значение семафора успешно декрементировано). Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.

Коды ошибок:

EAGAIN
Вызов должен был привести к блокировке, но значение try не равно 0.
EDEADLK
Обнаружена взаимная блокировка (deadlock).
EINTR
Вызов был прерван сигналом.
EINVAL
Указатель sync не характеризует корректный семафор.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

sync_t, sem_destroy(), sem_init(), sem_post(), sem_timedwait(), sem_trywait(), sem_wait(), SyncDestroy(), SyncSemPost(), SyncTypeCreate()




Предыдущий раздел: Описание API системной библиотеки