2013-03-14 07:07:42 +00:00
|
|
|
@node POSIX Threads
|
2013-09-23 20:13:47 +00:00
|
|
|
@c @node POSIX Threads, Internal Probes, Cryptographic Functions, Top
|
2013-03-14 07:07:42 +00:00
|
|
|
@chapter POSIX Threads
|
|
|
|
@c %MENU% POSIX Threads
|
2013-03-15 03:58:54 +00:00
|
|
|
@cindex pthreads
|
2013-03-14 07:07:42 +00:00
|
|
|
|
|
|
|
This chapter describes the @glibcadj{} POSIX Thread implementation.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Thread-specific Data:: Support for creating and
|
|
|
|
managing thread-specific data
|
2013-06-15 06:57:40 +00:00
|
|
|
* Non-POSIX Extensions:: Additional functions to extend
|
|
|
|
POSIX Thread functionality
|
2013-03-14 07:07:42 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Thread-specific Data
|
|
|
|
@section Thread-specific Data
|
|
|
|
|
|
|
|
The @glibcadj{} implements functions to allow users to create and manage
|
|
|
|
data specific to a thread. Such data may be destroyed at thread exit,
|
|
|
|
if a destructor is provided. The following functions are defined:
|
|
|
|
|
2014-02-28 23:30:22 +00:00
|
|
|
@comment pthread.h
|
|
|
|
@comment POSIX
|
2014-02-03 19:17:59 +00:00
|
|
|
@deftypefun int pthread_key_create (pthread_key_t *@var{key}, void (*@var{destructor})(void*))
|
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c pthread_key_create ok
|
|
|
|
@c KEY_UNUSED ok
|
|
|
|
@c KEY_USABLE ok
|
2013-03-14 07:07:42 +00:00
|
|
|
Create a thread-specific data key for the calling thread, referenced by
|
|
|
|
@var{key}.
|
|
|
|
|
|
|
|
Objects declared with the C++11 @code{thread_local} keyword are destroyed
|
|
|
|
before thread-specific data, so they should not be used in thread-specific
|
|
|
|
data destructors or even as members of the thread-specific data, since the
|
|
|
|
latter is passed as an argument to the destructor function.
|
2014-02-03 19:17:59 +00:00
|
|
|
@end deftypefun
|
2013-03-14 07:07:42 +00:00
|
|
|
|
2014-02-28 23:30:22 +00:00
|
|
|
@comment pthread.h
|
|
|
|
@comment POSIX
|
2014-02-03 19:17:59 +00:00
|
|
|
@deftypefun int pthread_key_delete (pthread_key_t @var{key})
|
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c pthread_key_delete ok
|
|
|
|
@c This uses atomic compare and exchange to increment the seq number
|
|
|
|
@c after testing it's not a KEY_UNUSED seq number.
|
|
|
|
@c KEY_UNUSED dup ok
|
2013-03-14 07:07:42 +00:00
|
|
|
Destroy the thread-specific data @var{key} in the calling thread. The
|
|
|
|
destructor for the thread-specific data is not called during destruction, nor
|
|
|
|
is it called during thread exit.
|
2014-02-03 19:17:59 +00:00
|
|
|
@end deftypefun
|
2013-03-14 07:07:42 +00:00
|
|
|
|
2014-02-28 23:30:22 +00:00
|
|
|
@comment pthread.h
|
|
|
|
@comment POSIX
|
2014-02-03 19:17:59 +00:00
|
|
|
@deftypefun void *pthread_getspecific (pthread_key_t @var{key})
|
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
|
|
|
@c pthread_getspecific ok
|
2013-03-14 07:07:42 +00:00
|
|
|
Return the thread-specific data associated with @var{key} in the calling
|
|
|
|
thread.
|
2014-02-03 19:17:59 +00:00
|
|
|
@end deftypefun
|
2013-03-14 07:07:42 +00:00
|
|
|
|
2014-02-28 23:30:22 +00:00
|
|
|
@comment pthread.h
|
|
|
|
@comment POSIX
|
2014-02-03 19:17:59 +00:00
|
|
|
@deftypefun int pthread_setspecific (pthread_key_t @var{key}, const void *@var{value})
|
|
|
|
@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
|
|
|
|
@c pthread_setspecific @asucorrupt @ascuheap @acucorrupt @acsmem
|
|
|
|
@c a level2 block may be allocated by a signal handler after
|
|
|
|
@c another call already made a decision to allocate it, thus losing
|
|
|
|
@c the allocated value. the seq number is updated before the
|
|
|
|
@c value, which might cause an earlier-generation value to seem
|
|
|
|
@c current if setspecific is cancelled or interrupted by a signal
|
|
|
|
@c KEY_UNUSED ok
|
|
|
|
@c calloc dup @ascuheap @acsmem
|
2013-03-14 07:07:42 +00:00
|
|
|
Associate the thread-specific @var{value} with @var{key} in the calling thread.
|
2014-02-03 19:17:59 +00:00
|
|
|
@end deftypefun
|
2013-03-14 07:07:42 +00:00
|
|
|
|
2013-06-15 06:57:40 +00:00
|
|
|
|
|
|
|
@node Non-POSIX Extensions
|
|
|
|
@section Non-POSIX Extensions
|
|
|
|
|
|
|
|
In addition to implementing the POSIX API for threads, @theglibc{} provides
|
|
|
|
additional functions and interfaces to provide functionality not specified in
|
|
|
|
the standard.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Default Thread Attributes:: Setting default attributes for
|
|
|
|
threads in a process.
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Default Thread Attributes
|
|
|
|
@subsection Setting Process-wide defaults for thread attributes
|
|
|
|
|
|
|
|
@Theglibc{} provides non-standard API functions to set and get the default
|
|
|
|
attributes used in the creation of threads in a process.
|
|
|
|
|
2014-02-28 23:30:22 +00:00
|
|
|
@comment pthread.h
|
|
|
|
@comment GNU
|
2013-06-15 06:57:40 +00:00
|
|
|
@deftypefun int pthread_getattr_default_np (pthread_attr_t *@var{attr})
|
2014-02-01 03:29:35 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
|
|
|
|
@c Takes lock around read from default_pthread_attr.
|
2013-06-15 06:57:40 +00:00
|
|
|
Get the default attribute values and set @var{attr} to match. This
|
|
|
|
function returns @math{0} on success and a non-zero error code on
|
|
|
|
failure.
|
|
|
|
@end deftypefun
|
|
|
|
|
2014-02-28 23:30:22 +00:00
|
|
|
@comment pthread.h
|
|
|
|
@comment GNU
|
2013-10-04 11:49:11 +00:00
|
|
|
@deftypefun int pthread_setattr_default_np (pthread_attr_t *@var{attr})
|
2014-02-01 03:29:35 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
|
|
|
|
@c pthread_setattr_default_np @ascuheap @asulock @aculock @acsmem
|
|
|
|
@c check_sched_policy_attr ok
|
|
|
|
@c check_sched_priority_attr ok
|
|
|
|
@c sched_get_priority_min dup ok
|
|
|
|
@c sched_get_priority_max dup ok
|
|
|
|
@c check_stacksize_attr ok
|
|
|
|
@c lll_lock @asulock @aculock
|
|
|
|
@c free dup @ascuheap @acsmem
|
|
|
|
@c realloc dup @ascuheap @acsmem
|
|
|
|
@c memcpy dup ok
|
|
|
|
@c lll_unlock @asulock @aculock
|
2013-06-15 06:57:40 +00:00
|
|
|
Set the default attribute values to match the values in @var{attr}. The
|
|
|
|
function returns @math{0} on success and a non-zero error code on failure.
|
|
|
|
The following error codes are defined for this function:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item EINVAL
|
|
|
|
At least one of the values in @var{attr} does not qualify as valid for the
|
|
|
|
attributes or the stack address is set in the attribute.
|
|
|
|
@item ENOMEM
|
|
|
|
The system does not have sufficient memory.
|
|
|
|
@end table
|
|
|
|
@end deftypefun
|
2014-02-01 03:29:35 +00:00
|
|
|
|
|
|
|
@c FIXME these are undocumented:
|
|
|
|
@c pthread_atfork
|
|
|
|
@c pthread_attr_destroy
|
|
|
|
@c pthread_attr_getaffinity_np
|
|
|
|
@c pthread_attr_getdetachstate
|
|
|
|
@c pthread_attr_getguardsize
|
|
|
|
@c pthread_attr_getinheritsched
|
|
|
|
@c pthread_attr_getschedparam
|
|
|
|
@c pthread_attr_getschedpolicy
|
|
|
|
@c pthread_attr_getscope
|
|
|
|
@c pthread_attr_getstack
|
|
|
|
@c pthread_attr_getstackaddr
|
|
|
|
@c pthread_attr_getstacksize
|
|
|
|
@c pthread_attr_init
|
|
|
|
@c pthread_attr_setaffinity_np
|
|
|
|
@c pthread_attr_setdetachstate
|
|
|
|
@c pthread_attr_setguardsize
|
|
|
|
@c pthread_attr_setinheritsched
|
|
|
|
@c pthread_attr_setschedparam
|
|
|
|
@c pthread_attr_setschedpolicy
|
|
|
|
@c pthread_attr_setscope
|
|
|
|
@c pthread_attr_setstack
|
|
|
|
@c pthread_attr_setstackaddr
|
|
|
|
@c pthread_attr_setstacksize
|
|
|
|
@c pthread_barrierattr_destroy
|
|
|
|
@c pthread_barrierattr_getpshared
|
|
|
|
@c pthread_barrierattr_init
|
|
|
|
@c pthread_barrierattr_setpshared
|
|
|
|
@c pthread_barrier_destroy
|
|
|
|
@c pthread_barrier_init
|
|
|
|
@c pthread_barrier_wait
|
|
|
|
@c pthread_cancel
|
|
|
|
@c pthread_cleanup_push
|
|
|
|
@c pthread_cleanup_pop
|
|
|
|
@c pthread_condattr_destroy
|
|
|
|
@c pthread_condattr_getclock
|
|
|
|
@c pthread_condattr_getpshared
|
|
|
|
@c pthread_condattr_init
|
|
|
|
@c pthread_condattr_setclock
|
|
|
|
@c pthread_condattr_setpshared
|
|
|
|
@c pthread_cond_broadcast
|
|
|
|
@c pthread_cond_destroy
|
|
|
|
@c pthread_cond_init
|
|
|
|
@c pthread_cond_signal
|
|
|
|
@c pthread_cond_timedwait
|
|
|
|
@c pthread_cond_wait
|
|
|
|
@c pthread_create
|
|
|
|
@c pthread_detach
|
|
|
|
@c pthread_equal
|
|
|
|
@c pthread_exit
|
|
|
|
@c pthread_getaffinity_np
|
|
|
|
@c pthread_getattr_np
|
|
|
|
@c pthread_getconcurrency
|
|
|
|
@c pthread_getcpuclockid
|
|
|
|
@c pthread_getname_np
|
|
|
|
@c pthread_getschedparam
|
|
|
|
@c pthread_join
|
|
|
|
@c pthread_kill
|
|
|
|
@c pthread_kill_other_threads_np
|
|
|
|
@c pthread_mutexattr_destroy
|
|
|
|
@c pthread_mutexattr_getkind_np
|
|
|
|
@c pthread_mutexattr_getprioceiling
|
|
|
|
@c pthread_mutexattr_getprotocol
|
|
|
|
@c pthread_mutexattr_getpshared
|
|
|
|
@c pthread_mutexattr_getrobust
|
|
|
|
@c pthread_mutexattr_getrobust_np
|
|
|
|
@c pthread_mutexattr_gettype
|
|
|
|
@c pthread_mutexattr_init
|
|
|
|
@c pthread_mutexattr_setkind_np
|
|
|
|
@c pthread_mutexattr_setprioceiling
|
|
|
|
@c pthread_mutexattr_setprotocol
|
|
|
|
@c pthread_mutexattr_setpshared
|
|
|
|
@c pthread_mutexattr_setrobust
|
|
|
|
@c pthread_mutexattr_setrobust_np
|
|
|
|
@c pthread_mutexattr_settype
|
|
|
|
@c pthread_mutex_consistent
|
|
|
|
@c pthread_mutex_consistent_np
|
|
|
|
@c pthread_mutex_destroy
|
|
|
|
@c pthread_mutex_getprioceiling
|
|
|
|
@c pthread_mutex_init
|
|
|
|
@c pthread_mutex_lock
|
|
|
|
@c pthread_mutex_setprioceiling
|
|
|
|
@c pthread_mutex_timedlock
|
|
|
|
@c pthread_mutex_trylock
|
|
|
|
@c pthread_mutex_unlock
|
|
|
|
@c pthread_once
|
|
|
|
@c pthread_rwlockattr_destroy
|
|
|
|
@c pthread_rwlockattr_getkind_np
|
|
|
|
@c pthread_rwlockattr_getpshared
|
|
|
|
@c pthread_rwlockattr_init
|
|
|
|
@c pthread_rwlockattr_setkind_np
|
|
|
|
@c pthread_rwlockattr_setpshared
|
|
|
|
@c pthread_rwlock_destroy
|
|
|
|
@c pthread_rwlock_init
|
|
|
|
@c pthread_rwlock_rdlock
|
|
|
|
@c pthread_rwlock_timedrdlock
|
|
|
|
@c pthread_rwlock_timedwrlock
|
|
|
|
@c pthread_rwlock_tryrdlock
|
|
|
|
@c pthread_rwlock_trywrlock
|
|
|
|
@c pthread_rwlock_unlock
|
|
|
|
@c pthread_rwlock_wrlock
|
|
|
|
@c pthread_self
|
|
|
|
@c pthread_setaffinity_np
|
|
|
|
@c pthread_setcancelstate
|
|
|
|
@c pthread_setcanceltype
|
|
|
|
@c pthread_setconcurrency
|
|
|
|
@c pthread_setname_np
|
|
|
|
@c pthread_setschedparam
|
|
|
|
@c pthread_setschedprio
|
|
|
|
@c pthread_sigmask
|
|
|
|
@c pthread_sigqueue
|
|
|
|
@c pthread_spin_destroy
|
|
|
|
@c pthread_spin_init
|
|
|
|
@c pthread_spin_lock
|
|
|
|
@c pthread_spin_trylock
|
|
|
|
@c pthread_spin_unlock
|
|
|
|
@c pthread_testcancel
|
|
|
|
@c pthread_timedjoin_np
|
|
|
|
@c pthread_tryjoin_np
|
|
|
|
@c pthread_yield
|