pthread_barrier_wait()

Updated: April 19, 2023

Synchronize participating threads at the barrier

Synopsis:

#include <sync.h>

int pthread_barrier_wait( pthread_barrier_t * barrier );

Arguments:

barrier
A pointer to the pthread_barrier_t object that you want to use to synchronize the threads. You must initialize the barrier by calling pthread_barrier_init() before calling pthread_barrier_wait().

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The pthread_barrier_wait() function synchronizes participating threads at the barrier referenced by barrier. The calling thread blocks—that is, it doesn't return from pthread_barrier_wait()—until the required number of threads have called pthread_barrier_wait(), specifying the barrier.

When the required number of threads have called pthread_barrier_wait() specifying the barrier, the function returns PTHREAD_BARRIER_SERIAL_THREAD to one arbitrarily chosen thread, and zero to each of the remaining threads. At this point, the barrier is reset to the state it occupied as a result of the most recent pthread_barrier_init() function that referenced it.

The constant PTHREAD_BARRIER_SERIAL_THREAD is defined in <pthread.h>, and its value is distinct from any other value that pthread_barrier_wait() returns.

If a signal is delivered to a thread blocked on a barrier, on return from the signal handler, the thread resumes waiting at the barrier as if it hadn't been interrupted.

Returns:

PTHREAD_BARRIER_SERIAL_THREAD to a single (arbitrary) thread synchronized at the barrier, and zero to each of the other threads; otherwise, pthread_barrier_wait() returns an error number:

EINVAL
The barrier argument isn't initialized.

Classification:

POSIX 1003.1

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes