Разблокировать все ожидающие потоки
#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 системной библиотеки