summaryrefslogtreecommitdiff
path: root/man/tip/nng_cv_wait.3supp.html
blob: 30eaa0f64247f0c4cbf6779895b4472cc1ef4553 (plain)
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
---
version: tip
layout: manpage_v2
title: nng_cv_wait(3supp)
---
<h1>nng_cv_wait(3supp)</h1>
<div class="sect1">
<h2 id="_name">NAME</h2>
<div class="sectionbody">
<div class="paragraph">
<p>nng_cv_wait - wait for condition</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="pygments highlight"><code data-lang="c"><span></span><span class="tok-cp">#include</span><span class="tok-w"> </span><span class="tok-cpf">&lt;nng/nng.h&gt;</span>
<span class="tok-cp">#include</span><span class="tok-w"> </span><span class="tok-cpf">&lt;nng/supplemental/util/platform.h&gt;</span>

<span class="tok-kt">void</span><span class="tok-w"> </span><span class="tok-nf">nng_cv_wait</span><span class="tok-p">(</span><span class="tok-n">nng_cv</span><span class="tok-w"> </span><span class="tok-o">*</span><span class="tok-n">cv</span><span class="tok-p">);</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The <code>nng_cv_wait()</code> waits for the condition variable <em>cv</em> to be signaled
by another thread calling either <a href="nng_cv_wake.3supp.html"><code>nng_cv_wake()</code></a> or
<a href="nng_cv_wake1.3supp.html"><code>nng_cv_wake1()</code></a>.</p>
</div>
<div class="paragraph">
<p>The caller must have have ownership of the mutex that was used when
<em>cv</em> was allocated.
This function will drop the ownership of that mutex, and reacquire it
atomically just before returning to the caller.
(The waiting is done without holding the mutex.)</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
Any condition may be used or checked, but the condition must be
checked, as it is possible for this function to wake up spuriously.
The best way to do this is inside a loop that repeats until the condition
tests for true.
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_example">EXAMPLE</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The following example demonstrates use of this function:</p>
</div>
<div class="listingblock">
<div class="title">Example 1: Waiting for the condition</div>
<div class="content">
<pre class="pygments highlight"><code data-lang="c"><span></span>
<span class="tok-w">    </span><span class="tok-n">nng_mtx_lock</span><span class="tok-p">(</span><span class="tok-n">m</span><span class="tok-p">);</span><span class="tok-w">  </span><span class="tok-c1">// assume cv was allocated using m</span>
<span class="tok-w">    </span><span class="tok-k">while</span><span class="tok-w"> </span><span class="tok-p">(</span><span class="tok-o">!</span><span class="tok-n">condition_true</span><span class="tok-p">)</span><span class="tok-w"> </span><span class="tok-p">{</span>
<span class="tok-w">        </span><span class="tok-n">nng_cv_wait</span><span class="tok-p">(</span><span class="tok-n">cv</span><span class="tok-p">);</span>
<span class="tok-w">    </span><span class="tok-p">}</span>
<span class="tok-w">    </span><span class="tok-c1">// condition_true is true</span>
<span class="tok-w">    </span><span class="tok-n">nng_mtx_unlock</span><span class="tok-p">(</span><span class="tok-n">m</span><span class="tok-p">);</span></code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">Example 2: Signaling the condition</div>
<div class="content">
<pre class="pygments highlight"><code data-lang="c"><span></span><span class="tok-w">    </span><span class="tok-n">nng_mtx_lock</span><span class="tok-p">(</span><span class="tok-n">m</span><span class="tok-p">);</span>
<span class="tok-w">    </span><span class="tok-n">condition_true</span><span class="tok-w"> </span><span class="tok-o">=</span><span class="tok-w"> </span><span class="tok-nb">true</span><span class="tok-p">;</span>
<span class="tok-w">    </span><span class="tok-n">nng_cv_wake</span><span class="tok-p">(</span><span class="tok-n">cv</span><span class="tok-p">);</span>
<span class="tok-w">    </span><span class="tok-n">nng_mtx_unlock</span><span class="tok-p">(</span><span class="tok-n">m</span><span class="tok-p">);</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_return_values">RETURN VALUES</h2>
<div class="sectionbody">
<div class="paragraph">
<p>None.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_errors">ERRORS</h2>
<div class="sectionbody">
<div class="paragraph">
<p>None.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph text-left">
<p><a href="nng_cv_alloc.3supp.html">nng_cv_alloc(3supp)</a>,
<a href="nng_cv_until.3supp.html">nng_cv_until(3supp)</a>,
<a href="nng_cv_wake.3supp.html">nng_cv_wake(3supp)</a>,
<a href="nng_cv_wake1.3supp.html">nng_cv_wake1(3supp)</a>,
<a href="nng_mtx_alloc.3supp.html">nng_mtx_alloc(3supp)</a>,
<a href="nng_mtx_lock.3supp.html">nng_mtx_lock(3supp)</a>,
<a href="nng_mtx_unlock.3supp.html">nng_mtx_unlock(3supp)</a>,
<a href="nng.7.html">nng(7)</a></p>
</div>
</div>
</div>