1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
<table class="head">
<tr>
<td class="head-ltitle">PTHREAD_BARRIER(3)</td>
<td class="head-vol">Library Functions Manual</td>
<td class="head-rtitle">PTHREAD_BARRIER(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_barrier_destroy</code>,
<code class="Nm">pthread_barrier_init</code>,
<code class="Nm">pthread_barrier_wait</code> —
<span class="Nd">destroy, initialize or wait on a barrier object</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
<<a class="In">pthread.h</a>></code></p>
<p class="Pp"><var class="Ft">int</var>
<br/>
<code class="Fn">pthread_barrier_destroy</code>(<var class="Fa" style="white-space: nowrap;">pthread_barrier_t
*barrier</var>);</p>
<p class="Pp"><var class="Ft">int</var>
<br/>
<code class="Fn">pthread_barrier_init</code>(<var class="Fa" style="white-space: nowrap;">pthread_barrier_t
*restrict barrier</var>, <var class="Fa" style="white-space: nowrap;">const
pthread_barrierattr_t *attr</var>,
<var class="Fa" style="white-space: nowrap;">unsigned count</var>);</p>
<p class="Pp"><var class="Ft">int</var>
<br/>
<code class="Fn">pthread_barrier_wait</code>(<var class="Fa" style="white-space: nowrap;">pthread_barrier_t
*barrier</var>);</p>
</section>
<section class="Sh">
<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
<p class="Pp">The
<a class="permalink" href="#pthread_barrier_init"><code class="Fn" id="pthread_barrier_init">pthread_barrier_init</code></a>()
function will initialize <var class="Fa">barrier</var> with attributes
specified in <var class="Fa">attr</var>, or if it is
<code class="Dv">NULL</code>, with default attributes. The number of threads
that must call <code class="Fn">pthread_barrier_wait</code>() before any of
the waiting threads can be released is specified by
<var class="Fa">count</var>. The
<a class="permalink" href="#pthread_barrier_destroy"><code class="Fn" id="pthread_barrier_destroy">pthread_barrier_destroy</code></a>()
function will destroy <var class="Fa">barrier</var> and release any
resources that may have been allocated on its behalf.</p>
<p class="Pp" id="pthread_barrier_wait">The
<a class="permalink" href="#pthread_barrier_wait"><code class="Fn">pthread_barrier_wait</code></a>()
function will synchronize calling threads at <var class="Fa">barrier</var>.
The threads will be blocked from making further progress until a sufficient
number of threads calls this function. The number of threads that must call
it before any of them will be released is determined by the
<var class="Fa">count</var> argument to
<code class="Fn">pthread_barrier_init</code>(). Once the threads have been
released the barrier will be reset.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION
NOTES</a></h1>
<p class="Pp">In <span class="Lb">1:1 Threading Library (libthr, -lthr)</span>
the <code class="Dv">PTHREAD_BARRIER_SERIAL_THREAD</code> return value will
always be returned by the last thread to reach the barrier.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
VALUES</a></h1>
<p class="Pp">If successful, both
<code class="Fn">pthread_barrier_destroy</code>() and
<code class="Fn">pthread_barrier_init</code>() will return zero. Otherwise,
an error number will be returned to indicate the error. If the call to
<code class="Fn">pthread_barrier_wait</code>() is successful, all but one of
the threads will return zero. That one thread will return
<code class="Dv">PTHREAD_BARRIER_SERIAL_THREAD</code>. Otherwise, an error
number will be returned to indicate the error.</p>
<p class="Pp">None of these functions will return
<code class="Er">EINTR</code>.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
<p class="Pp">The <code class="Fn">pthread_barrier_destroy</code>() function
will fail if:</p>
<dl class="Bl-tag">
<dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt>
<dd>An attempt was made to destroy <var class="Fa">barrier</var> while it was
in use.</dd>
</dl>
<p class="Pp">The <code class="Fn">pthread_barrier_destroy</code>() and
<code class="Fn">pthread_barrier_wait</code>() functions may fail if:</p>
<dl class="Bl-tag">
<dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
<dd>The value specified by <var class="Fa">barrier</var> is invalid.</dd>
</dl>
<p class="Pp">The <code class="Fn">pthread_barrier_init</code>() function will
fail if:</p>
<dl class="Bl-tag">
<dt id="EAGAIN">[<a class="permalink" href="#EAGAIN"><code class="Er">EAGAIN</code></a>]</dt>
<dd>The system lacks resources, other than memory, to initialize
<var class="Fa">barrier</var>.</dd>
<dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt>
<dd>The <var class="Fa">count</var> argument is less than 1.</dd>
<dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt>
<dd>Insufficient memory to initialize <var class="Fa">barrier</var>.</dd>
</dl>
</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">pthread_barrierattr(3)</a></p>
</section>
<section class="Sh">
<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
<p class="Pp">The <code class="Fn">pthread_barrier_destroy</code>(),
<code class="Fn">pthread_barrier_init</code>() and
<code class="Fn">pthread_barrier_wait</code>() functions first appeared in
<span class="Lb">N:M Threading Library (libkse, -lkse)</span> in
<span class="Ux">FreeBSD 5.2</span>, and in <span class="Lb">1:1 Threading
Library (libthr, -lthr)</span> in <span class="Ux">FreeBSD 5.3</span>.</p>
</section>
</div>
<table class="foot">
<tr>
<td class="foot-date">August 17, 2018</td>
<td class="foot-os">FreeBSD 15.0</td>
</tr>
</table>
|