SyncMutexUnlock(), SyncMutexUnlock_r()

Снять блокировку мьютекса

Прототип:

#include <sys/neutrino.h>
int SyncMutexUnlock( sync_t *sync );
int SyncMutexUnlock_r( sync_t *sync );

Аргументы:

sync
Указатель на объект синхронизации sync_t.

Библиотека:

libc

Описание:

Системные вызовы SyncMutexUnlock() и SyncMutexUnlock_r() разблокирует мьютекс sync, владельцем которого должен являться текущий поток. Если на мьютексе заблокированы другие потоки, поле owner структуры sync устанавливается в идентификатор наиболее приоритетного из ожидающих потоков, который при этом ждет дольше остальных. Также этот поток переводится в состояние READY с последующим переходом в состояние RUNNING. Если подходящих потоков не обнаружено, поле устанавливается в значение 0.

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

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


Note: POSIX-функции pthread_mutex_lock() и pthread_mutex_unlock() работают быстрее, поскольку они не во всех случаях приводят к системному вызову.

Состояния блокировки:

Данные вызовы не являются блокирующими.

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

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

Коды ошибок:

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

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

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

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

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

sync_t, pthread_mutex_lock(), pthread_mutex_unlock(), SyncTypeCreate(), SyncMutexLock()




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