Provided by: manpages-posix-dev_2013a-2_all bug

PROLOG

       This  manual  page  is part of the POSIX Programmer's Manual.  The Linux implementation of this interface
       may differ (consult the corresponding Linux manual page for details of Linux behavior), or the  interface
       may not be implemented on Linux.

NAME

       pthread_barrier_wait — synchronize at a barrier

SYNOPSIS

       #include <pthread.h>

       int pthread_barrier_wait(pthread_barrier_t *barrier);

DESCRIPTION

       The  pthread_barrier_wait() function shall synchronize participating threads at the barrier referenced by
       barrier.   The  calling  thread  shall  block  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
       constant PTHREAD_BARRIER_SERIAL_THREAD shall be returned to one unspecified  thread  and  zero  shall  be
       returned  to each of the remaining threads. At this point, the barrier shall be reset to the state it had
       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 shall be distinct from
       any other value returned by pthread_barrier_wait().

       The results are undefined if this function is called with an uninitialized barrier.

       If a signal is delivered to a thread blocked on a barrier, upon return from the signal handler the thread
       shall resume waiting at the barrier if the barrier wait has not  completed  (that  is,  if  the  required
       number of threads have not arrived at the barrier during the execution of the signal handler); otherwise,
       the thread shall continue as normal from the completed barrier wait.  Until  the  thread  in  the  signal
       handler  returns  from it, it is unspecified whether other threads may proceed past the barrier once they
       have all reached it.

       A thread that has blocked on a barrier shall not prevent any unblocked thread that is eligible to use the
       same  processing  resources  from  eventually  making  forward progress in its execution. Eligibility for
       processing resources shall be determined by the scheduling policy.

RETURN VALUE

       Upon     successful     completion,     the     pthread_barrier_wait()     function     shall      return
       PTHREAD_BARRIER_SERIAL_THREAD  for  a  single (arbitrary) thread synchronized at the barrier and zero for
       each of the other threads. Otherwise, an error number shall be returned to indicate the error.

ERRORS

       This function shall not return an error code of [EINTR].

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       Applications using this function may  be  subject  to  priority  inversion,  as  discussed  in  the  Base
       Definitions volume of POSIX.1‐2008, Section 3.287, Priority Inversion.

RATIONALE

       If  an  implementation detects that the value specified by the barrier argument to pthread_barrier_wait()
       does not refer to an initialized barrier object, it is recommended that  the  function  should  fail  and
       report an [EINVAL] error.

FUTURE DIRECTIONS

       None.

SEE ALSO

       pthread_barrier_destroy()

       The  Base  Definitions  volume  of  POSIX.1‐2008, Section 3.287, Priority Inversion, Section 4.11, Memory
       Synchronization, <pthread.h>

COPYRIGHT

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2013 Edition,
       Standard  for  Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base
       Specifications Issue 7, Copyright (C) 2013 by the Institute of Electrical and Electronics Engineers,  Inc
       and  The  Open Group.  (This is POSIX.1-2008 with the 2013 Technical Corrigendum 1 applied.) In the event
       of any discrepancy between this version and the original IEEE and The Open Group Standard,  the  original
       IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at
       http://www.unix.org/online.html .

       Any typographical or formatting errors that appear in this page are most likely to have  been  introduced
       during   the   conversion  of  the  source  files  to  man  page  format.  To  report  such  errors,  see
       https://www.kernel.org/doc/man-pages/reporting_bugs.html .