Выполнить операцию над объектом синхронизации
| Не используйте системные вызовы SyncCtl() и SyncCtl_r() явно; вместо этого следует использовать функции: |
#include <sys/neutrino.h>
int SyncCtl( int cmd,
sync_t *sync,
void *data );
int SyncCtl_r( int cmd,
sync_t *sync,
void *data );
- cmd
- Тип операции:
- _NTO_SCTL_GETPRIOCEILING
- Получение предельный приоритет (PCP, Priority Ceiling Protocol) мьютекса sync и запись значения в data.
- _NTO_SCTL_SETPRIOCEILING
- Установка предельного приоритета (PCP, Priority Ceiling Protocol) мьютекса sync в значение data. Возвращает предыдущий предельный приоритет.
- _NTO_SCTL_SETEVENT
- Присоединение события, на которое указывает аргумент data, к мьютексу sync. Данное событие будет доставляться при обнаружении факта перехода мьютекса в состояние DEAD (мьютекс заблокирован уничтоженным потоком).
- _NTO_SCTL_MUTEX_WAKEUP
- Принудительное разблокирование потока, ожидающего на мьютексе sync. Аргумент data должен указывать на структуру, содержащую идентификаторы целевого потока и процесса:
struct ptid {
pid_t pid;
pthread_t tid;
}
- sync
- Указатель на объект синхронизации sync_t.
- data
- Указатель на данные, ассоциированные с заданной операцией, либо переменная для хранения запрошенной информации.
libc
Системные вызовы SyncCtl() и SyncCtl_r() позволяют:
- получать или устанавливать предельный приоритет (PCP, Priority Ceiling Protocol) мьютекса sync
- присоединить к мьютексу событие, которое будет доставляться при обнаружении факта перехода мьютекса в состояние DEAD (мьютекс заблокирован уничтоженным потоком)
- разбудить поток, заблокированный на мьютексе
Эти функции эквивалентны, за исключением способа информирования об ошибках.
- SyncCtl()
- Если возникла ошибка функция возвращает
-1
, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.
- SyncCtl_r()
EOK
возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.
- EAGAIN
- Все объекты синхронизации ядра в настоящий момент используются.
- EFAULT
- Возникла ошибка при обращении ядра к sync или data.
- EINVAL
- Объект синхронизации sync не существует или предельный приоритет data мьютекса вне допустимого диапазона.
- ENOSYS
- Функции SyncCtl() и SyncCtl_r() не поддерживаются.
ЗОСРВ «Нейтрино»
- Нет
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Да
- В потоке
- Да
sync_t, pthread_mutex_getprioceiling(), pthread_mutex_setprioceiling(), pthread_mutex_wakeup_np(), SyncCondvarSignal(), SyncCondvarWait(), SyncDestroy(), SyncMutexEvent(), SyncMutexLock(), SyncMutexRevive(), SyncMutexUnlock(), SyncTypeCreate()
Предыдущий раздел: Описание API системной библиотеки