SyncCondvarSignal(), SyncCondvarSignal_r()

Разблокировать один из потоков, блокированных на условной переменной

Прототип:

#include <sys/neutrino.h>
int SyncCondvarSignal( sync_t *sync,
int broadcast );
int SyncCondvarSignal_r( sync_t *sync,
int broadcast );

Аргументы:

sync
Указатель на объект синхронизации sync_t. Он должен быть проинициализирован динамически с помощью SyncTypeCreate() или статически с помощью PTHREAD_COND_INITIALIZER.
broadcast
0, если требуется разблокировать один поток с наивысшим приоритетом, который ожидает дольше других. Иное значение, если разблокировать требуется все ожидающие потоки.

Библиотека:

libc

Описание:

Системные вызовы SyncCondvarSignal() и SyncCondvarSignal_r() разблокируют один или несколько потоков, ожидающих на объекте синхронизации sync. Эти функции эквивалентны, за исключением способа информирования об ошибках.


Note: Вместо явного использования данных системных вызовов следует рассмотреть возможность использования функций pthread_cond_broadcast() и pthread_cond_signal().

В любом случае, каждый разблокированный поток будет пытаться захватить контролирующий мьютекс, заданный при вызове SyncCondvarWait(), причем выполняться это будет перед возвращением управления в поток. если мьютекс уже заблокирован, то происходит блокирование уже на мьютексе.

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

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

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

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

Коды ошибок:

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

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

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

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

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

sync_t, pthread_cond_broadcast(), pthread_cond_signal(), pthread_cond_wait(), pthread_cond_wait_interruptible(), SyncCondvarWait()




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