pthread_key_create, pthread_key_delete, pthread_setspe-
cific, pthread_getspecific - management of thread-specific
data
SYNOPSIS
#include <pthread.h>
int pthread_key_create(pthread_key_t *key, void
(*destr_function) (void *));
int pthread_key_delete(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, const void
*pointer);
void * pthread_getspecific(pthread_key_t key);
DESCRIPTION
Programs often need global or static variables that have
different values in different threads. Since threads share
one memory space, this cannot be achieved with regular
variables. Thread-specific data is the POSIX threads
answer to this need.
Each thread possesses a private memory block, the thread-
specific data area, or TSD area for short. This area is
indexed by TSD keys. The TSD area associates values of
type void * to TSD keys. TSD keys are common to all
threads, but the value associated with a given TSD key can
be different in each thread.
For concreteness, the TSD areas can be viewed as arrays of
void * pointers, TSD keys as integer indices into these
arrays, and the value of a TSD key as the value of the
corresponding array element in the calling thread.
When a thread is created, its TSD area initially associ-
ates NULL with all keys.
pthread_key_create allocates a new TSD key. The key is
stored in the location pointed to by key. There is a
limit of PTHREAD_KEYS_MAX on the number of keys allocated
at a given time. The value initially associated with the
returned key is NULL in all currently executing threads.
The destr_function argument, if not NULL, specifies a
destructor function associated with the key. When a thread
terminates, destr_function is called with arguments the
value associated with the key in that thread. The
destr_function is not called if that value is NULL. The
pthread_key_delete deallocates a TSD key. It does not
check whether non- NULL values are associated with that
key in the currently executing threads, nor call the
destructor function associated with the key.
pthread_setspecific changes the value associated with key
in the calling thread, storing the given pointer instead.
pthread_getspecific returns the value currently associated
with key in the calling thread.
RETURN VALUE
pthread_key_create, pthread_key_delete, and pthread_set-
specific return 0 on success and a non-zero error code on
failure. If successful, pthread_key_create stores the
newly allocated key in the location pointed to by its key
argument.
pthread_getspecific returns the value associated with key
on success, and NULL on error.
ERRORS
pthread_key_create returns the following error code on
error:
EAGAIN PTHREAD_KEYS_MAX keys are already allocated
pthread_key_delete and pthread_setspecific return the fol-
lowing error code on error:
EINVAL key is not a valid, allocated TSD key
pthread_getspecific returns NULL if key is not a valid,
allocated TSD key.
AUTHOR
Xavier Leroy <Xavier.Leroy@inria.fr>
SEE ALSO
pthread_create(3), pthread_exit(3), pthread_testcancel(3).