pthread_barrier_wait()

Синхронизировать потоки, ожидающие на барьере

Прототип:

#include <sync.h>
int pthread_barrier_wait( pthread_barrier_t *barrier );

Аргументы:

barrier
Указатель на объект синхранизации pthread_barrier_t. Он должен быть предварительно создан с помощью pthread_barrier_init().

Библиотека:

libc

Описание:

Функция pthread_barrier_wait() выполняет синхронизацию вовлеченных потоков на барьере barrier. Вызвавшие ее потоки блокируются до тех пор, пока не наберется требуемое число ожидающих потоков. Данный параметр определяется при создании барьера в функции pthread_barrier_init().

При выполнении указанного условия все ожидающие потоки разблокируются. При этом одному из потоков из функции возвращается значение PTHREAD_BARRIER_SERIAL_THREAD, а всем последующим 0. С этого момента состояние барьера сбрасывается в начальное, определенное в pthread_barrier_init().

Константа PTHREAD_BARRIER_SERIAL_THREAD определена в <pthread.h>.

При поступлении заблокированному потоку сигнала вызывается соответствующий обработчик, но при выходе из него поток снова оказывается заблокирован на том же барьере без прерывания процедуры синхронизации.

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

PTHREAD_BARRIER_SERIAL_THREAD
доставляется при разблокировании одному произвольному потоку, ожидающему на барьере и ...
0
... каждому последующему
EINVAL
Объект barrier не был инициализирован.

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

POSIX 1003.1 THR BAR

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

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

pthread_barrier_destroy(), pthread_barrier_init()




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