summaryrefslogtreecommitdiff
path: root/static/freebsd/man3/pthread.3 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man3/pthread.3 3.html')
-rw-r--r--static/freebsd/man3/pthread.3 3.html466
1 files changed, 466 insertions, 0 deletions
diff --git a/static/freebsd/man3/pthread.3 3.html b/static/freebsd/man3/pthread.3 3.html
new file mode 100644
index 00000000..5f60899b
--- /dev/null
+++ b/static/freebsd/man3/pthread.3 3.html
@@ -0,0 +1,466 @@
+<table class="head">
+ <tr>
+ <td class="head-ltitle">PTHREAD(3)</td>
+ <td class="head-vol">Library Functions Manual</td>
+ <td class="head-rtitle">PTHREAD(3)</td>
+ </tr>
+</table>
+<div class="manual-text">
+<section class="Sh">
+<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
+<p class="Pp"><code class="Nm">pthread</code> &#x2014; <span class="Nd">POSIX
+ thread functions</span></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1>
+<p class="Pp"><span class="Lb">POSIX Threads Library (libpthread,
+ -lpthread)</span></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
+<p class="Pp"><code class="In">#include
+ &lt;<a class="In">pthread.h</a>&gt;</code></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
+<p class="Pp">POSIX threads are a set of functions that support applications
+ with requirements for multiple flows of control, called
+ <a class="permalink" href="#threads"><i class="Em" id="threads">threads</i></a>,
+ within a process. Multithreading is used to improve the performance of a
+ program.</p>
+<p class="Pp">The POSIX thread functions are summarized in this section in the
+ following groups:</p>
+<p class="Pp"></p>
+<ul class="Bl-bullet Bd-indent Bl-compact">
+ <li>Thread Routines</li>
+ <li>Attribute Object Routines</li>
+ <li>Mutex Routines</li>
+ <li>Condition Variable Routines</li>
+ <li>Read/Write Lock Routines</li>
+ <li>Per-Thread Context Routines</li>
+ <li>Cleanup Routines</li>
+</ul>
+<p class="Pp"><span class="Ux">FreeBSD</span> extensions to the POSIX thread
+ functions are summarized in <a class="Xr">pthread_np(3)</a>.</p>
+<section class="Ss">
+<h2 class="Ss" id="Thread_Routines"><a class="permalink" href="#Thread_Routines">Thread
+ Routines</a></h2>
+<dl class="Bl-tag">
+ <dt id="pthread_create"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_create"><code class="Fn">pthread_create</code></a>(<var class="Fa">pthread_t
+ *thread</var>, <var class="Fa">const pthread_attr_t *attr</var>,
+ <var class="Fa">void *(*start_routine)(void *)</var>, <var class="Fa">void
+ *arg</var>);</dt>
+ <dd>Creates a new thread of execution.</dd>
+ <dt id="pthread_cancel"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_cancel"><code class="Fn">pthread_cancel</code></a>(<var class="Fa">pthread_t
+ thread</var>)</dt>
+ <dd>Cancels execution of a thread.</dd>
+ <dt id="pthread_detach"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_detach"><code class="Fn">pthread_detach</code></a>(<var class="Fa">pthread_t
+ thread</var>)</dt>
+ <dd>Marks a thread for deletion.</dd>
+ <dt id="pthread_equal"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_equal"><code class="Fn">pthread_equal</code></a>(<var class="Fa">pthread_t
+ t1</var>, <var class="Fa">pthread_t t2</var>)</dt>
+ <dd>Compares two thread IDs.</dd>
+ <dt id="pthread_exit"><var class="Ft">void</var>
+ <a class="permalink" href="#pthread_exit"><code class="Fn">pthread_exit</code></a>(<var class="Fa">void
+ *value_ptr</var>)</dt>
+ <dd>Terminates the calling thread.</dd>
+ <dt id="pthread_join"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_join"><code class="Fn">pthread_join</code></a>(<var class="Fa">pthread_t
+ thread</var>, <var class="Fa">void **value_ptr</var>)</dt>
+ <dd>Causes the calling thread to wait for the termination of the specified
+ thread.</dd>
+ <dt id="pthread_kill"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_kill"><code class="Fn">pthread_kill</code></a>(<var class="Fa">pthread_t
+ thread</var>, <var class="Fa">int sig</var>)</dt>
+ <dd>Delivers a signal to a specified thread.</dd>
+ <dt id="pthread_once"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_once"><code class="Fn">pthread_once</code></a>(<var class="Fa">pthread_once_t
+ *once_control</var>, <var class="Fa">void (*init_routine)(void)</var>)</dt>
+ <dd>Calls an initialization routine once.</dd>
+ <dt id="pthread_self"><var class="Ft">pthread_t</var>
+ <a class="permalink" href="#pthread_self"><code class="Fn">pthread_self</code></a>(<var class="Fa">void</var>)</dt>
+ <dd>Returns the thread ID of the calling thread.</dd>
+ <dt id="pthread_setcancelstate"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_setcancelstate"><code class="Fn">pthread_setcancelstate</code></a>(<var class="Fa">int
+ state</var>, <var class="Fa">int *oldstate</var>)</dt>
+ <dd>Sets the current thread's cancelability state.</dd>
+ <dt id="pthread_setcanceltype"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_setcanceltype"><code class="Fn">pthread_setcanceltype</code></a>(<var class="Fa">int
+ type</var>, <var class="Fa">int *oldtype</var>)</dt>
+ <dd>Sets the current thread's cancelability type.</dd>
+ <dt id="pthread_testcancel"><var class="Ft">void</var>
+ <a class="permalink" href="#pthread_testcancel"><code class="Fn">pthread_testcancel</code></a>(<var class="Fa">void</var>)</dt>
+ <dd>Creates a cancellation point in the calling thread.</dd>
+ <dt id="pthread_yield"><var class="Ft">void</var>
+ <a class="permalink" href="#pthread_yield"><code class="Fn">pthread_yield</code></a>(<var class="Fa">void</var>)</dt>
+ <dd>Allows the scheduler to run another thread instead of the current
+ one.</dd>
+</dl>
+</section>
+<section class="Ss">
+<h2 class="Ss" id="Attribute_Object_Routines"><a class="permalink" href="#Attribute_Object_Routines">Attribute
+ Object Routines</a></h2>
+<dl class="Bl-tag">
+ <dt id="pthread_attr_destroy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_destroy"><code class="Fn">pthread_attr_destroy</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>)</dt>
+ <dd>Destroy a thread attributes object.</dd>
+ <dt id="pthread_attr_getinheritsched"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_getinheritsched"><code class="Fn">pthread_attr_getinheritsched</code></a>(<var class="Fa">const
+ pthread_attr_t *attr</var>, <var class="Fa">int *inheritsched</var>);</dt>
+ <dd>Get the inherit scheduling attribute from a thread attributes object.</dd>
+ <dt id="pthread_attr_getschedparam"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_getschedparam"><code class="Fn">pthread_attr_getschedparam</code></a>(<var class="Fa">const
+ pthread_attr_t *attr</var>, <var class="Fa">struct sched_param
+ *param</var>);</dt>
+ <dd>Get the scheduling parameter attribute from a thread attributes
+ object.</dd>
+ <dt id="pthread_attr_getschedpolicy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_getschedpolicy"><code class="Fn">pthread_attr_getschedpolicy</code></a>(<var class="Fa">const
+ pthread_attr_t *attr</var>, <var class="Fa">int *policy</var>)</dt>
+ <dd>Get the scheduling policy attribute from a thread attributes object.</dd>
+ <dt id="pthread_attr_getscope"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_getscope"><code class="Fn">pthread_attr_getscope</code></a>(<var class="Fa">const
+ pthread_attr_t *attr</var>, <var class="Fa">int *contentionscope</var>)</dt>
+ <dd>Get the contention scope attribute from a thread attributes object.</dd>
+ <dt id="pthread_attr_getstacksize"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_getstacksize"><code class="Fn">pthread_attr_getstacksize</code></a>(<var class="Fa">const
+ pthread_attr_t *attr</var>, <var class="Fa">size_t *stacksize</var>)</dt>
+ <dd>Get the stack size attribute from a thread attributes object.</dd>
+ <dt id="pthread_attr_getstackaddr"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_getstackaddr"><code class="Fn">pthread_attr_getstackaddr</code></a>(<var class="Fa">const
+ pthread_attr_t *attr</var>, <var class="Fa">void **stackaddr</var>)</dt>
+ <dd>Get the stack address attribute from a thread attributes object.</dd>
+ <dt id="pthread_attr_getdetachstate"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_getdetachstate"><code class="Fn">pthread_attr_getdetachstate</code></a>(<var class="Fa">const
+ pthread_attr_t *attr</var>, <var class="Fa">int *detachstate</var>)</dt>
+ <dd>Get the detach state attribute from a thread attributes object.</dd>
+ <dt id="pthread_attr_init"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_init"><code class="Fn">pthread_attr_init</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>)</dt>
+ <dd>Initialize a thread attributes object with default values.</dd>
+ <dt id="pthread_attr_setinheritsched"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_setinheritsched"><code class="Fn">pthread_attr_setinheritsched</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>, <var class="Fa">int inheritsched</var>)</dt>
+ <dd>Set the inherit scheduling attribute in a thread attributes object.</dd>
+ <dt id="pthread_attr_setschedparam"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_setschedparam"><code class="Fn">pthread_attr_setschedparam</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>, <var class="Fa">const struct sched_param *param</var>);</dt>
+ <dd>Set the scheduling parameter attribute in a thread attributes object.</dd>
+ <dt id="pthread_attr_setschedpolicy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_setschedpolicy"><code class="Fn">pthread_attr_setschedpolicy</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>, <var class="Fa">int policy</var>)</dt>
+ <dd>Set the scheduling policy attribute in a thread attributes object.</dd>
+ <dt id="pthread_attr_setscope"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_setscope"><code class="Fn">pthread_attr_setscope</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>, <var class="Fa">int contentionscope</var>)</dt>
+ <dd>Set the contention scope attribute in a thread attributes object.</dd>
+ <dt id="pthread_attr_setstacksize"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_setstacksize"><code class="Fn">pthread_attr_setstacksize</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>, <var class="Fa">size_t stacksize</var>)</dt>
+ <dd>Set the stack size attribute in a thread attributes object.</dd>
+ <dt id="pthread_attr_setstackaddr"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_setstackaddr"><code class="Fn">pthread_attr_setstackaddr</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>, <var class="Fa">void *stackaddr</var>)</dt>
+ <dd>Set the stack address attribute in a thread attributes object.</dd>
+ <dt id="pthread_attr_setdetachstate"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_attr_setdetachstate"><code class="Fn">pthread_attr_setdetachstate</code></a>(<var class="Fa">pthread_attr_t
+ *attr</var>, <var class="Fa">int detachstate</var>)</dt>
+ <dd>Set the detach state in a thread attributes object.</dd>
+</dl>
+</section>
+<section class="Ss">
+<h2 class="Ss" id="Mutex_Routines"><a class="permalink" href="#Mutex_Routines">Mutex
+ Routines</a></h2>
+<dl class="Bl-tag">
+ <dt id="pthread_mutexattr_destroy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutexattr_destroy"><code class="Fn">pthread_mutexattr_destroy</code></a>(<var class="Fa">pthread_mutexattr_t
+ *attr</var>)</dt>
+ <dd>Destroy a mutex attributes object.</dd>
+ <dt id="pthread_mutexattr_getprioceiling"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutexattr_getprioceiling"><code class="Fn">pthread_mutexattr_getprioceiling</code></a>(<var class="Fa">const
+ pthread_mutexattr_t *restrict attr</var>, <var class="Fa">int *restrict
+ ceiling</var>)</dt>
+ <dd>Obtain priority ceiling attribute of mutex attribute object.</dd>
+ <dt id="pthread_mutexattr_getprotocol"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutexattr_getprotocol"><code class="Fn">pthread_mutexattr_getprotocol</code></a>(<var class="Fa">const
+ pthread_mutexattr_t *restrict attr</var>, <var class="Fa">int *restrict
+ protocol</var>)</dt>
+ <dd>Obtain protocol attribute of mutex attribute object.</dd>
+ <dt id="pthread_mutexattr_gettype"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutexattr_gettype"><code class="Fn">pthread_mutexattr_gettype</code></a>(<var class="Fa">const
+ pthread_mutexattr_t *restrict attr</var>, <var class="Fa">int *restrict
+ type</var>)</dt>
+ <dd>Obtain the mutex type attribute in the specified mutex attributes
+ object.</dd>
+ <dt id="pthread_mutexattr_init"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutexattr_init"><code class="Fn">pthread_mutexattr_init</code></a>(<var class="Fa">pthread_mutexattr_t
+ *attr</var>)</dt>
+ <dd>Initialize a mutex attributes object with default values.</dd>
+ <dt id="pthread_mutexattr_setprioceiling"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutexattr_setprioceiling"><code class="Fn">pthread_mutexattr_setprioceiling</code></a>(<var class="Fa">pthread_mutexattr_t
+ *attr</var>, <var class="Fa">int ceiling</var>)</dt>
+ <dd>Set priority ceiling attribute of mutex attribute object.</dd>
+ <dt id="pthread_mutexattr_setprotocol"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutexattr_setprotocol"><code class="Fn">pthread_mutexattr_setprotocol</code></a>(<var class="Fa">pthread_mutexattr_t
+ *attr</var>, <var class="Fa">int protocol</var>)</dt>
+ <dd>Set protocol attribute of mutex attribute object.</dd>
+ <dt id="pthread_mutexattr_settype"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutexattr_settype"><code class="Fn">pthread_mutexattr_settype</code></a>(<var class="Fa">pthread_mutexattr_t
+ *attr</var>, <var class="Fa">int type</var>)</dt>
+ <dd>Set the mutex type attribute that is used when a mutex is created.</dd>
+ <dt id="pthread_mutex_destroy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutex_destroy"><code class="Fn">pthread_mutex_destroy</code></a>(<var class="Fa">pthread_mutex_t
+ *mutex</var>)</dt>
+ <dd>Destroy a mutex.</dd>
+ <dt id="pthread_mutex_init"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutex_init"><code class="Fn">pthread_mutex_init</code></a>(<var class="Fa">pthread_mutex_t
+ *mutex</var>, <var class="Fa">const pthread_mutexattr_t *attr</var>);</dt>
+ <dd>Initialize a mutex with specified attributes.</dd>
+ <dt id="pthread_mutex_lock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutex_lock"><code class="Fn">pthread_mutex_lock</code></a>(<var class="Fa">pthread_mutex_t
+ *mutex</var>)</dt>
+ <dd>Lock a mutex and block until it becomes available.</dd>
+ <dt id="pthread_mutex_timedlock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutex_timedlock"><code class="Fn">pthread_mutex_timedlock</code></a>(<var class="Fa">pthread_mutex_t
+ *mutex</var>, <var class="Fa">const struct timespec *abstime</var>);</dt>
+ <dd>Lock a mutex and block until it becomes available or until the timeout
+ expires.</dd>
+ <dt id="pthread_mutex_trylock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutex_trylock"><code class="Fn">pthread_mutex_trylock</code></a>(<var class="Fa">pthread_mutex_t
+ *mutex</var>)</dt>
+ <dd>Try to lock a mutex, but do not block if the mutex is locked by another
+ thread, including the current thread.</dd>
+ <dt id="pthread_mutex_unlock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_mutex_unlock"><code class="Fn">pthread_mutex_unlock</code></a>(<var class="Fa">pthread_mutex_t
+ *mutex</var>)</dt>
+ <dd>Unlock a mutex.</dd>
+</dl>
+</section>
+<section class="Ss">
+<h2 class="Ss" id="Condition_Variable_Routines"><a class="permalink" href="#Condition_Variable_Routines">Condition
+ Variable Routines</a></h2>
+<dl class="Bl-tag">
+ <dt id="pthread_condattr_destroy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_condattr_destroy"><code class="Fn">pthread_condattr_destroy</code></a>(<var class="Fa">pthread_condattr_t
+ *attr</var>)</dt>
+ <dd>Destroy a condition variable attributes object.</dd>
+ <dt id="pthread_condattr_init"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_condattr_init"><code class="Fn">pthread_condattr_init</code></a>(<var class="Fa">pthread_condattr_t
+ *attr</var>)</dt>
+ <dd>Initialize a condition variable attributes object with default
+ values.</dd>
+ <dt id="pthread_cond_broadcast"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_cond_broadcast"><code class="Fn">pthread_cond_broadcast</code></a>(<var class="Fa">pthread_cond_t
+ *cond</var>)</dt>
+ <dd>Unblock all threads currently blocked on the specified condition
+ variable.</dd>
+ <dt id="pthread_cond_destroy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_cond_destroy"><code class="Fn">pthread_cond_destroy</code></a>(<var class="Fa">pthread_cond_t
+ *cond</var>)</dt>
+ <dd>Destroy a condition variable.</dd>
+ <dt id="pthread_cond_init"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_cond_init"><code class="Fn">pthread_cond_init</code></a>(<var class="Fa">pthread_cond_t
+ *cond</var>, <var class="Fa">const pthread_condattr_t *attr</var>)</dt>
+ <dd>Initialize a condition variable with specified attributes.</dd>
+ <dt id="pthread_cond_signal"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_cond_signal"><code class="Fn">pthread_cond_signal</code></a>(<var class="Fa">pthread_cond_t
+ *cond</var>)</dt>
+ <dd>Unblock at least one of the threads blocked on the specified condition
+ variable.</dd>
+ <dt id="pthread_cond_timedwait"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_cond_timedwait"><code class="Fn">pthread_cond_timedwait</code></a>(<var class="Fa">pthread_cond_t
+ *cond</var>, <var class="Fa">pthread_mutex_t *mutex</var>,
+ <var class="Fa">const struct timespec *abstime</var>);</dt>
+ <dd>Unlock the specified mutex, wait no longer than the specified time for a
+ condition, and then relock the mutex.</dd>
+ <dt id="pthread_cond_wait"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_cond_wait"><code class="Fn">pthread_cond_wait</code></a>(<var class="Fa">pthread_cond_t
+ *</var>, <var class="Fa">pthread_mutex_t *mutex</var>)</dt>
+ <dd>Unlock the specified mutex, wait for a condition, and relock the
+ mutex.</dd>
+</dl>
+</section>
+<section class="Ss">
+<h2 class="Ss" id="Read/Write_Lock_Routines"><a class="permalink" href="#Read/Write_Lock_Routines">Read/Write
+ Lock Routines</a></h2>
+<dl class="Bl-tag">
+ <dt id="pthread_rwlock_destroy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlock_destroy"><code class="Fn">pthread_rwlock_destroy</code></a>(<var class="Fa">pthread_rwlock_t
+ *lock</var>)</dt>
+ <dd>Destroy a read/write lock object.</dd>
+ <dt id="pthread_rwlock_init"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlock_init"><code class="Fn">pthread_rwlock_init</code></a>(<var class="Fa">pthread_rwlock_t
+ *lock</var>, <var class="Fa">const pthread_rwlockattr_t *attr</var>);</dt>
+ <dd>Initialize a read/write lock object.</dd>
+ <dt id="pthread_rwlock_rdlock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlock_rdlock"><code class="Fn">pthread_rwlock_rdlock</code></a>(<var class="Fa">pthread_rwlock_t
+ *lock</var>)</dt>
+ <dd>Lock a read/write lock for reading, blocking until the lock can be
+ acquired.</dd>
+ <dt id="pthread_rwlock_tryrdlock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlock_tryrdlock"><code class="Fn">pthread_rwlock_tryrdlock</code></a>(<var class="Fa">pthread_rwlock_t
+ *lock</var>)</dt>
+ <dd>Attempt to lock a read/write lock for reading, without blocking if the
+ lock is unavailable.</dd>
+ <dt id="pthread_rwlock_trywrlock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlock_trywrlock"><code class="Fn">pthread_rwlock_trywrlock</code></a>(<var class="Fa">pthread_rwlock_t
+ *lock</var>)</dt>
+ <dd>Attempt to lock a read/write lock for writing, without blocking if the
+ lock is unavailable.</dd>
+ <dt id="pthread_rwlock_unlock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlock_unlock"><code class="Fn">pthread_rwlock_unlock</code></a>(<var class="Fa">pthread_rwlock_t
+ *lock</var>)</dt>
+ <dd>Unlock a read/write lock.</dd>
+ <dt id="pthread_rwlock_wrlock"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlock_wrlock"><code class="Fn">pthread_rwlock_wrlock</code></a>(<var class="Fa">pthread_rwlock_t
+ *lock</var>)</dt>
+ <dd>Lock a read/write lock for writing, blocking until the lock can be
+ acquired.</dd>
+ <dt id="pthread_rwlockattr_destroy"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlockattr_destroy"><code class="Fn">pthread_rwlockattr_destroy</code></a>(<var class="Fa">pthread_rwlockattr_t
+ *attr</var>)</dt>
+ <dd>Destroy a read/write lock attribute object.</dd>
+ <dt id="pthread_rwlockattr_getpshared"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlockattr_getpshared"><code class="Fn">pthread_rwlockattr_getpshared</code></a>(<var class="Fa">const
+ pthread_rwlockattr_t *attr</var>, <var class="Fa">int *pshared</var>);</dt>
+ <dd>Retrieve the process shared setting for the read/write lock attribute
+ object.</dd>
+ <dt id="pthread_rwlockattr_init"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlockattr_init"><code class="Fn">pthread_rwlockattr_init</code></a>(<var class="Fa">pthread_rwlockattr_t
+ *attr</var>)</dt>
+ <dd>Initialize a read/write lock attribute object.</dd>
+ <dt id="pthread_rwlockattr_setpshared"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_rwlockattr_setpshared"><code class="Fn">pthread_rwlockattr_setpshared</code></a>(<var class="Fa">pthread_rwlockattr_t
+ *attr</var>, <var class="Fa">int pshared</var>)</dt>
+ <dd>Set the process shared setting for the read/write lock attribute
+ object.</dd>
+</dl>
+</section>
+<section class="Ss">
+<h2 class="Ss" id="Per-Thread_Context_Routines"><a class="permalink" href="#Per-Thread_Context_Routines">Per-Thread
+ Context Routines</a></h2>
+<dl class="Bl-tag">
+ <dt id="pthread_key_create"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_key_create"><code class="Fn">pthread_key_create</code></a>(<var class="Fa">pthread_key_t
+ *key</var>, <var class="Fa">void (*routine)(void *)</var>)</dt>
+ <dd>Create a thread-specific data key.</dd>
+ <dt id="pthread_key_delete"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_key_delete"><code class="Fn">pthread_key_delete</code></a>(<var class="Fa">pthread_key_t
+ key</var>)</dt>
+ <dd>Delete a thread-specific data key.</dd>
+ <dt id="pthread_getspecific"><var class="Ft">void *</var>
+ <a class="permalink" href="#pthread_getspecific"><code class="Fn">pthread_getspecific</code></a>(<var class="Fa">pthread_key_t
+ key</var>)</dt>
+ <dd>Get the thread-specific value for the specified key.</dd>
+ <dt id="pthread_setspecific"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_setspecific"><code class="Fn">pthread_setspecific</code></a>(<var class="Fa">pthread_key_t
+ key</var>, <var class="Fa">const void *value_ptr</var>)</dt>
+ <dd>Set the thread-specific value for the specified key.</dd>
+</dl>
+</section>
+<section class="Ss">
+<h2 class="Ss" id="Cleanup_Routines"><a class="permalink" href="#Cleanup_Routines">Cleanup
+ Routines</a></h2>
+<dl class="Bl-tag">
+ <dt id="pthread_atfork"><var class="Ft">int</var>
+ <a class="permalink" href="#pthread_atfork"><code class="Fn">pthread_atfork</code></a>(<var class="Fa">void
+ (*prepare)(void)</var>, <var class="Fa">void (*parent)(void)</var>,
+ <var class="Fa">void (*child)(void)</var>);</dt>
+ <dd>Register fork handlers.</dd>
+ <dt id="pthread_cleanup_pop"><var class="Ft">void</var>
+ <a class="permalink" href="#pthread_cleanup_pop"><code class="Fn">pthread_cleanup_pop</code></a>(<var class="Fa">int
+ execute</var>)</dt>
+ <dd>Remove the routine at the top of the calling thread's cancellation cleanup
+ stack and optionally invoke it.</dd>
+ <dt id="pthread_cleanup_push"><var class="Ft">void</var>
+ <a class="permalink" href="#pthread_cleanup_push"><code class="Fn">pthread_cleanup_push</code></a>(<var class="Fa">void
+ (*routine)(void *)</var>, <var class="Fa">void *routine_arg</var>)</dt>
+ <dd>Push the specified cancellation cleanup handler onto the calling thread's
+ cancellation stack.</dd>
+</dl>
+</section>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
+ NOTES</a></h1>
+<p class="Pp">The current <span class="Ux">FreeBSD</span> POSIX thread
+ implementation is built into the <span class="Lb">1:1 Threading Library
+ (libthr, -lthr)</span> library. It contains thread-safe versions of
+ <span class="Lb">Standard C&#x00A0;Library (libc, -lc)</span> functions and
+ the thread functions. Threaded applications are linked with this
+ library.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+ ALSO</a></h1>
+<p class="Pp"><a class="Xr">libthr(3)</a>, <a class="Xr">pthread_atfork(3)</a>,
+ <a class="Xr">pthread_attr(3)</a>, <a class="Xr">pthread_cancel(3)</a>,
+ <a class="Xr">pthread_cleanup_pop(3)</a>,
+ <a class="Xr">pthread_cleanup_push(3)</a>,
+ <a class="Xr">pthread_cond_broadcast(3)</a>,
+ <a class="Xr">pthread_cond_destroy(3)</a>,
+ <a class="Xr">pthread_cond_init(3)</a>,
+ <a class="Xr">pthread_cond_signal(3)</a>,
+ <a class="Xr">pthread_cond_timedwait(3)</a>,
+ <a class="Xr">pthread_cond_wait(3)</a>,
+ <a class="Xr">pthread_condattr_destroy(3)</a>,
+ <a class="Xr">pthread_condattr_init(3)</a>,
+ <a class="Xr">pthread_create(3)</a>, <a class="Xr">pthread_detach(3)</a>,
+ <a class="Xr">pthread_equal(3)</a>, <a class="Xr">pthread_exit(3)</a>,
+ <a class="Xr">pthread_getspecific(3)</a>, <a class="Xr">pthread_join(3)</a>,
+ <a class="Xr">pthread_key_delete(3)</a>, <a class="Xr">pthread_kill(3)</a>,
+ <a class="Xr">pthread_mutex_destroy(3)</a>,
+ <a class="Xr">pthread_mutex_init(3)</a>,
+ <a class="Xr">pthread_mutex_lock(3)</a>,
+ <a class="Xr">pthread_mutex_trylock(3)</a>,
+ <a class="Xr">pthread_mutex_unlock(3)</a>,
+ <a class="Xr">pthread_mutexattr_destroy(3)</a>,
+ <a class="Xr">pthread_mutexattr_getprioceiling(3)</a>,
+ <a class="Xr">pthread_mutexattr_getprotocol(3)</a>,
+ <a class="Xr">pthread_mutexattr_gettype(3)</a>,
+ <a class="Xr">pthread_mutexattr_init(3)</a>,
+ <a class="Xr">pthread_mutexattr_setprioceiling(3)</a>,
+ <a class="Xr">pthread_mutexattr_setprotocol(3)</a>,
+ <a class="Xr">pthread_mutexattr_settype(3)</a>,
+ <a class="Xr">pthread_np(3)</a>, <a class="Xr">pthread_once(3)</a>,
+ <a class="Xr">pthread_rwlock_destroy(3)</a>,
+ <a class="Xr">pthread_rwlock_init(3)</a>,
+ <a class="Xr">pthread_rwlock_rdlock(3)</a>,
+ <a class="Xr">pthread_rwlock_unlock(3)</a>,
+ <a class="Xr">pthread_rwlock_wrlock(3)</a>,
+ <a class="Xr">pthread_rwlockattr_destroy(3)</a>,
+ <a class="Xr">pthread_rwlockattr_getpshared(3)</a>,
+ <a class="Xr">pthread_rwlockattr_init(3)</a>,
+ <a class="Xr">pthread_rwlockattr_setpshared(3)</a>,
+ <a class="Xr">pthread_self(3)</a>,
+ <a class="Xr">pthread_setcancelstate(3)</a>,
+ <a class="Xr">pthread_setcanceltype(3)</a>,
+ <a class="Xr">pthread_setspecific(3)</a>,
+ <a class="Xr">pthread_testcancel(3)</a></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="STANDARDS"><a class="permalink" href="#STANDARDS">STANDARDS</a></h1>
+<p class="Pp">The functions with the <code class="Nm">pthread_</code> prefix and
+ not <code class="Nm">_np</code> suffix or
+ <code class="Nm">pthread_rwlock</code> prefix conform to
+ <span class="St">ISO/IEC 9945-1:1996 (&#x201C;POSIX.1&#x201D;)</span>.</p>
+<p class="Pp">The functions with the <code class="Nm">pthread_</code> prefix and
+ <code class="Nm">_np</code> suffix are non-portable extensions to POSIX
+ threads.</p>
+<p class="Pp">The functions with the <code class="Nm">pthread_rwlock</code>
+ prefix are extensions created by The Open Group as part of the
+ <span class="St">Version&#x00A0;2 of the Single UNIX Specification
+ (&#x201C;SUSv2&#x201D;)</span>.</p>
+</section>
+</div>
+<table class="foot">
+ <tr>
+ <td class="foot-date">October 12, 2021</td>
+ <td class="foot-os">FreeBSD 15.0</td>
+ </tr>
+</table>