PTHREAD_EXIT(3)            POSIX Programmer's Manual           PTHREAD_EXIT(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_exit -- thread termination

SSYYNNOOPPSSIISS
       #include <pthread.h>

       void pthread_exit(void *_v_a_l_u_e___p_t_r);

DDEESSCCRRIIPPTTIIOONN
       The _p_t_h_r_e_a_d___e_x_i_t() function shall terminate the calling thread and make
       the value _v_a_l_u_e___p_t_r available to any successful join with the
       terminating thread. Any cancellation cleanup handlers that have been
       pushed and not yet popped shall be popped in the reverse order that
       they were pushed and then executed. After all cancellation cleanup
       handlers have been executed, if the thread has any thread-specific
       data, appropriate destructor functions shall be called in an
       unspecified order. Thread termination does not release any application
       visible process resources, including, but not limited to, mutexes and
       file descriptors, nor does it perform any process-level cleanup
       actions, including, but not limited to, calling any _a_t_e_x_i_t() routines
       that may exist.

       An implicit call to _p_t_h_r_e_a_d___e_x_i_t() is made when a thread other than the
       thread in which _m_a_i_n() was first invoked returns from the start routine
       that was used to create it. The function's return value shall serve as
       the thread's exit status.

       The behavior of _p_t_h_r_e_a_d___e_x_i_t() is undefined if called from a
       cancellation cleanup handler or destructor function that was invoked as
       a result of either an implicit or explicit call to _p_t_h_r_e_a_d___e_x_i_t().

       After a thread has terminated, the result of access to local (auto)
       variables of the thread is undefined. Thus, references to local
       variables of the exiting thread should not be used for the
       _p_t_h_r_e_a_d___e_x_i_t() _v_a_l_u_e___p_t_r parameter value.

       The process shall exit with an exit status of 0 after the last thread
       has been terminated. The behavior shall be as if the implementation
       called _e_x_i_t() with a zero argument at thread termination time.

RREETTUURRNN VVAALLUUEE
       The _p_t_h_r_e_a_d___e_x_i_t() function cannot return to its caller.

EERRRROORRSS
       No errors are defined.

       _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
       None.

RRAATTIIOONNAALLEE
       The normal mechanism by which a thread terminates is to return from the
       routine that was specified in the _p_t_h_r_e_a_d___c_r_e_a_t_e() call that started
       it. The _p_t_h_r_e_a_d___e_x_i_t() function provides the capability for a thread to
       terminate without requiring a return from the start routine of that
       thread, thereby providing a function analogous to _e_x_i_t().

       Regardless of the method of thread termination, any cancellation
       cleanup handlers that have been pushed and not yet popped are executed,
       and the destructors for any existing thread-specific data are executed.
       This volume of POSIX.1-2017 requires that cancellation cleanup handlers
       be popped and called in order. After all cancellation cleanup handlers
       have been executed, thread-specific data destructors are called, in an
       unspecified order, for each item of thread-specific data that exists in
       the thread. This ordering is necessary because cancellation cleanup
       handlers may rely on thread-specific data.

       As the meaning of the status is determined by the application (except
       when the thread has been canceled, in which case it is
       PTHREAD_CANCELED), the implementation has no idea what an illegal
       status value is, which is why no address error checking is done.

FFUUTTUURREE DDIIRREECCTTIIOONNSS
       None.

SSEEEE AALLSSOO
       _e_x_i_t(), _p_t_h_r_e_a_d___c_r_e_a_t_e(), _p_t_h_r_e_a_d___j_o_i_n()

       The Base Definitions volume of POSIX.1-2017, <<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_EXIT(3)
