PTHREAD_BARRIER_WAIT(3)    POSIX Programmer's Manual   PTHREAD_BARRIER_WAIT(3)



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

NNAAMMEE
       pthread_barrier_wait -- synchronize at a barrier

SSYYNNOOPPSSIISS
       #include <pthread.h>

       int pthread_barrier_wait(pthread_barrier_t *_b_a_r_r_i_e_r);

DDEESSCCRRIIPPTTIIOONN
       The _p_t_h_r_e_a_d___b_a_r_r_i_e_r___w_a_i_t() function shall synchronize participating
       threads at the barrier referenced by _b_a_r_r_i_e_r.  The calling thread shall
       block until the required number of threads have called
       _p_t_h_r_e_a_d___b_a_r_r_i_e_r___w_a_i_t() specifying the barrier.

       When the required number of threads have called _p_t_h_r_e_a_d___b_a_r_r_i_e_r___w_a_i_t()
       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
       _p_t_h_r_e_a_d___b_a_r_r_i_e_r___i_n_i_t() function that referenced it.

       The constant PTHREAD_BARRIER_SERIAL_THREAD is defined in _<_p_t_h_r_e_a_d_._h_>
       and its value shall be distinct from any other value returned by
       _p_t_h_r_e_a_d___b_a_r_r_i_e_r___w_a_i_t().

       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.

RREETTUURRNN VVAALLUUEE
       Upon successful completion, the _p_t_h_r_e_a_d___b_a_r_r_i_e_r___w_a_i_t() 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.

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

       _T_h_e _f_o_l_l_o_w_i_n_g _s_e_c_t_i_o_n_s _a_r_e _i_n_f_o_r_m_a_t_i_v_e_.

EEXXAAMMPPLLEESS
       None.

AAPPPPLLIICCAATTIIOONN UUSSAAGGEE
       Applications using this function may be subject to priority inversion,
       as discussed in the Base Definitions volume of POSIX.1-2017, _S_e_c_t_i_o_n
       _3_._2_9_1, _P_r_i_o_r_i_t_y _I_n_v_e_r_s_i_o_n.

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

FFUUTTUURREE DDIIRREECCTTIIOONNSS
       None.

SSEEEE AALLSSOO
       _p_t_h_r_e_a_d___b_a_r_r_i_e_r___d_e_s_t_r_o_y()

       The Base Definitions volume of POSIX.1-2017, _S_e_c_t_i_o_n _3_._2_9_1, _P_r_i_o_r_i_t_y
       _I_n_v_e_r_s_i_o_n, _S_e_c_t_i_o_n _4_._1_2, _M_e_m_o_r_y _S_y_n_c_h_r_o_n_i_z_a_t_i_o_n, <<pptthhrreeaadd..hh>>

CCOOPPYYRRIIGGHHTT
       Portions of this text are reprinted and reproduced in electronic form
       from IEEE Std 1003.1-2017, Standard for Information Technology --
       Portable Operating System Interface (POSIX), The Open Group Base
       Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by the
       Institute of Electrical and Electronics Engineers, Inc and The Open
       Group.  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.opengroup.org/unix/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 .



IEEE/The Open Group                  2017              PTHREAD_BARRIER_WAIT(3)
