pthread_barrier_init()

Инициализировать барьер

Прототип:

#include <pthread.h>
int pthread_barrier_init( pthread_barrier_t *barrier,
const pthread_barrierattr_t *attr,
unsigned int count );

Аргументы:

barrier
Указатель на иниц иализируемый объект pthread_barrier_t.
attr
NULL или указатель на структуру pthread_barrierattr_t, характеризующую используемые атрибуты барьера.
count
Максимальное число ожидающих на мьютексе потоков. Оно должно быть больше нуля и характеризует число потоков, которые будут блокироваться на вызове pthread_barrier_wait() перед общим разблокированием.

Библиотека:

libc

Описание:

Функция pthread_barrier_init() выделяет ресурсы, требуемые для последующего использования барьера barrier и применяет к нему указанные attr атрибуты. Если праметр attr равен NULL, используются атрибуты по умолчанию. Будучи однажды инициализированным барьер может использоваться требуемое число раз.


Caution: Следует аллоцировать объекты синхронизации только в памяти с типичным маппированием. Так, на некоторых процессорах с архитектурой PPC атомарные операции синхронизации будут приводить к падению процесса если выделенная память является не кешируемой.

Если вызов pthread_barrier_init() завершается с ошибкой, барьер не инициализируется.

В случае, если стандартные атрибуты подходят, для статической инициализации барьера может применяться макрос PTHREAD_BARRIER_INITIALIZER(). Это эквивалентно передаче pthread_barrier_init() параметра attr со значением NULL, за исключением отсутствия контроля ошибок.

pthread_barrier_t barrier = PTHREAD_BARRIER_INITIALIZER( 2 );

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

EAGAIN
Недостаточно ресурсов для инициализации другого мьютекса.
EBUSY
Попытка переинициализировать барьер во время использования.
EFAULT
Возникла ошибка при попытке ядра обратиться к barrier или attr.
EINVAL
Значение attr не является корректным.
EOK
Успешное завершение.

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

POSIX 1003.1 THR BAR

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

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

pthread_barrierattr_init(), pthread_barrier_destroy(), pthread_barrier_wait()




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