SyncMutexEvent(), SyncMutexEvent_r()

Привязать событие к мьютексу

Прототип:

#include <sys/neutrino.h>
int SyncMutexEvent( sync_t *sync,
struct sigevent *event );
int SyncMutexEvent_r( sync_t *sync,
struct sigevent *event );

Аргументы:

sync
Указатель на объект синхронизации sync_t.
event
Указатель на структуру struct sigevent, которая описывает присоединяемое к мьютексу событие или NULL для его отсоединения.

Библиотека:

libc

Описание:

Системный вызов SyncMutexEvent() присоединяет событие event к мьютексу sync. Мьютекс переходит в состояние DEAD в том случае, когда память, включающая заблокированный мьютекс, подлежит освобождению. Одним из путей достижения такого сценария является терминирование процесса, владеющего разделяемым мьютексом. "Мертвый" мьютекс является достаточным условием для причиной бесконечной блокировки (deadlock) потоков в других процессах. Для принудительного перехвата владения мертвым мьютексом должна применяться функция SyncMutexRevive().

Если вызывается SyncMutexEvent() с NULL в качестве event, то ассоциированное с мьютексом событие освобождается.

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

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

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

Коды ошибок:

EAGAIN
Все объекты синхронизации ядра в настоящий момент используются.
EFAULT
Возникла ошибка при обращении ядра к sync.
EINVAL
Объект синхронизации sync не существует.

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

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

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

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

struct sigevent, sync_t, SyncCondvarSignal(), SyncCondvarWait(), SyncDestroy(), SyncMutexLock(), SyncMutexRevive(), SyncMutexUnlock()




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