pthread_barrier_destroy,
pthread_barrier_init,
pthread_barrier_wait —
destroy, initialize or wait on a barrier object
POSIX Threads Library (libpthread,
-lpthread)
#include
<pthread.h>
int
pthread_barrier_destroy(pthread_barrier_t
*barrier);
int
pthread_barrier_init(pthread_barrier_t
*restrict barrier, const
pthread_barrierattr_t *attr,
unsigned count);
int
pthread_barrier_wait(pthread_barrier_t
*barrier);
The
pthread_barrier_init()
function will initialize barrier with attributes
specified in attr, or if it is
NULL, with default attributes. The number of threads
that must call pthread_barrier_wait() before any of
the waiting threads can be released is specified by
count. The
pthread_barrier_destroy()
function will destroy barrier and release any
resources that may have been allocated on its behalf.
The
pthread_barrier_wait()
function will synchronize calling threads at barrier.
The threads will be blocked from making further progress until a sufficient
number of threads calls this function. The number of threads that must call
it before any of them will be released is determined by the
count argument to
pthread_barrier_init(). Once the threads have been
released the barrier will be reset.
In 1:1 Threading Library (libthr, -lthr)
the PTHREAD_BARRIER_SERIAL_THREAD return value will
always be returned by the last thread to reach the barrier.
If successful, both
pthread_barrier_destroy() and
pthread_barrier_init() will return zero. Otherwise,
an error number will be returned to indicate the error. If the call to
pthread_barrier_wait() is successful, all but one of
the threads will return zero. That one thread will return
PTHREAD_BARRIER_SERIAL_THREAD. Otherwise, an error
number will be returned to indicate the error.
None of these functions will return
EINTR.
The pthread_barrier_destroy() function
will fail if:
- [
EBUSY]
- An attempt was made to destroy barrier while it was
in use.
The pthread_barrier_destroy() and
pthread_barrier_wait() functions may fail if:
- [
EINVAL]
- The value specified by barrier is invalid.
The pthread_barrier_init() function will
fail if:
- [
EAGAIN]
- The system lacks resources, other than memory, to initialize
barrier.
- [
EINVAL]
- The count argument is less than 1.
- [
ENOMEM]
- Insufficient memory to initialize barrier.
The pthread_barrier_destroy(),
pthread_barrier_init() and
pthread_barrier_wait() functions first appeared in
N:M Threading Library (libkse, -lkse) in
FreeBSD 5.2, and in 1:1 Threading
Library (libthr, -lthr) in FreeBSD 5.3.