PTHREAD_GETSPECIFIC(3)     POSIX Programmer's Manual    PTHREAD_GETSPECIFIC(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_getspecific, pthread_setspecific -- thread-specific data
       management

SSYYNNOOPPSSIISS
       #include <pthread.h>

       void *pthread_getspecific(pthread_key_t _k_e_y);
       int pthread_setspecific(pthread_key_t _k_e_y, const void *_v_a_l_u_e);

DDEESSCCRRIIPPTTIIOONN
       The _p_t_h_r_e_a_d___g_e_t_s_p_e_c_i_f_i_c() function shall return the value currently
       bound to the specified _k_e_y on behalf of the calling thread.

       The _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c() function shall associate a thread-specific
       _v_a_l_u_e with a _k_e_y obtained via a previous call to _p_t_h_r_e_a_d___k_e_y___c_r_e_a_t_e().
       Different threads may bind different values to the same key. These
       values are typically pointers to blocks of dynamically allocated memory
       that have been reserved for use by the calling thread.

       The effect of calling _p_t_h_r_e_a_d___g_e_t_s_p_e_c_i_f_i_c() or _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c()
       with a _k_e_y value not obtained from _p_t_h_r_e_a_d___k_e_y___c_r_e_a_t_e() or after _k_e_y
       has been deleted with _p_t_h_r_e_a_d___k_e_y___d_e_l_e_t_e() is undefined.

       Both _p_t_h_r_e_a_d___g_e_t_s_p_e_c_i_f_i_c() and _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c() may be called from
       a thread-specific data destructor function. A call to
       _p_t_h_r_e_a_d___g_e_t_s_p_e_c_i_f_i_c() for the thread-specific data key being destroyed
       shall return the value NULL, unless the value is changed (after the
       destructor starts) by a call to _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c().  Calling
       _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c() from a thread-specific data destructor routine
       may result either in lost storage (after at least
       PTHREAD_DESTRUCTOR_ITERATIONS attempts at destruction) or in an
       infinite loop.

       Both functions may be implemented as macros.

RREETTUURRNN VVAALLUUEE
       The _p_t_h_r_e_a_d___g_e_t_s_p_e_c_i_f_i_c() function shall return the thread-specific
       data value associated with the given _k_e_y.  If no thread-specific data
       value is associated with _k_e_y, then the value NULL shall be returned.

       If successful, the _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c() function shall return zero;
       otherwise, an error number shall be returned to indicate the error.

EERRRROORRSS
       No errors are returned from _p_t_h_r_e_a_d___g_e_t_s_p_e_c_i_f_i_c().

       The _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c() function shall fail if:

       EENNOOMMEEMM Insufficient memory exists to associate the non-NULL value with
              the key.

       The _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c() 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
       None.

RRAATTIIOONNAALLEE
       Performance and ease-of-use of _p_t_h_r_e_a_d___g_e_t_s_p_e_c_i_f_i_c() are critical for
       functions that rely on maintaining state in thread-specific data. Since
       no errors are required to be detected by it, and since the only error
       that could be detected is the use of an invalid key, the function to
       _p_t_h_r_e_a_d___g_e_t_s_p_e_c_i_f_i_c() has been designed to favor speed and simplicity
       over error reporting.

       If an implementation detects that the value specified by the _k_e_y
       argument to _p_t_h_r_e_a_d___s_e_t_s_p_e_c_i_f_i_c() does not refer to a a key value
       obtained from _p_t_h_r_e_a_d___k_e_y___c_r_e_a_t_e() or refers to a key that has been
       deleted with _p_t_h_r_e_a_d___k_e_y___d_e_l_e_t_e(), 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___k_e_y___c_r_e_a_t_e()

       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_GETSPECIFIC(3)
