pthread_sleepon_broadcast()

Разблокировать все ожидающие потоки

Прототип:

#include <pthread.h>
int pthread_sleepon_broadcast( const volatile void *addr );

Аргументы:

addr
Дескриптор, которого ждут потоки. Значение addr обычно представляет собой структуру данных, управляющую ресурсом.

Библиотека:

libc

Описание:

Функция pthread_sleepon_broadcast() разблокирует все потоки, ожидающие в данный момент на addr. Потоки разблокируются в порядке их приоритетов.

Следует использовать pthread_sleepon_broadcast() или pthread_sleepon_signal(), в зависимости от требуемой задачи:

"Пробуждение" одного из заблокированных потоков
Следует использовать pthread_sleepon_signal(). При использовании pthread_sleepon_broadcast(), необходимо перепроверить условие и при необходимости повторно заблокировать потоки. Доступ к ресурсу предоставляется первому "проснувшемуся" потоку; все остальные потоки должны снова блокироваться. При использовании pthread_sleepon_signal(), нет необходимости перепроверять условие. Только один поток владеет блокировкой одновременно.
"Пробуждение" всех заблокированных потоков
Следует использовать pthread_sleepon_broadcast(). Необходимо перепроверить условия и при необходимости повторно заблокировать потоки. Не следует использовать pthread_sleepon_signal() в этом случае - это может привести к взаимной блокировке.

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

EOK
Успешное завершение.
EINVAL
Некорректный адрес.

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

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

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

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

pthread_cond_broadcast(), pthread_sleepon_signal(), pthread_sleepon_lock(), pthread_sleepon_unlock(), pthread_sleepon_wait()




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