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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
---
version: v1.7.2
layout: manpage_v2
title: nng_thread_create(3supp)
---
<h1>nng_thread_create(3supp)</h1>
<div class="sect1">
<h2 id="_name">NAME</h2>
<div class="sectionbody">
<div class="paragraph">
<p>nng_thread_create - create thread</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"><nng/nng.h></span>
<span class="tok-cp">#include</span><span class="tok-w"> </span><span class="tok-cpf"><nng/supplemental/util/platform.h></span>
<span class="tok-k">typedef</span><span class="tok-w"> </span><span class="tok-k">struct</span><span class="tok-w"> </span><span class="tok-nc">nng_thread</span><span class="tok-w"> </span><span class="tok-n">nng_thread</span><span class="tok-p">;</span>
<span class="tok-kt">int</span><span class="tok-w"> </span><span class="tok-nf">nng_thread_create</span><span class="tok-p">(</span><span class="tok-n">nng_thread</span><span class="tok-w"> </span><span class="tok-o">**</span><span class="tok-n">thrp</span><span class="tok-p">,</span><span class="tok-w"> </span><span class="tok-kt">void</span><span class="tok-w"> </span><span class="tok-p">(</span><span class="tok-o">*</span><span class="tok-n">func</span><span class="tok-p">)(</span><span class="tok-kt">void</span><span class="tok-w"> </span><span class="tok-o">*</span><span class="tok-p">),</span><span class="tok-w"> </span><span class="tok-kt">void</span><span class="tok-w"> </span><span class="tok-o">*</span><span class="tok-n">arg</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_thread_create()</code> function creates a single thread of execution,
running <em>func</em> with the argument <em>arg</em>.
The thread is started immediately.
A pointer to the thread object is returned in <em>thrp</em>.</p>
</div>
<div class="paragraph">
<p>The intention of this program is to facilitate writing parallel programs.
Threads created by this program will be based upon the underlying
threading mechanism of the system that <em>NNG</em> is running on.
This may include use of coroutines.</p>
</div>
<div class="paragraph">
<p>Using threads created by this function can make it easy to write
programs that use simple sequential execution, using functions in the
<em>NNG</em> suite that would otherwise normally wait synchronously for completion.</p>
</div>
<div class="paragraph">
<p>When the thread is no longer needed, the
<a href="nng_thread_destroy.3supp.html"><code>nng_thread_destroy()</code></a>
function should be used to reap it.
(This function will block waiting for <em>func</em> to return.)</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<i class="fa icon-important" title="Important"></i>
</td>
<td class="content">
Thread objects created by this function may not be real system
level threads capable of performing blocking I/O operations using normal blocking
system calls.
If use of blocking system calls is required (not including APIs provided
by the <em>NNG</em> library itself of course), then real OS-specific threads
should be created instead (such as with <code>pthread_create()</code> or similar
functions.)
</td>
</tr>
</table>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<i class="fa icon-important" title="Important"></i>
</td>
<td class="content">
Thread objects created by this function cannot be passed
to any system threading functions.
</td>
</tr>
</table>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
The system may impose limits on the number of threads that can be
created.
Typically applications should not create more than a dozen of these.
If greater concurrency or scalability is needed, consider instead using
an asynchronous model using <a href="nng_aio.5.html"><code>nng_aio</code></a> structures.
</td>
</tr>
</table>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
Threads can be synchronized using
<a href="nng_mtx_alloc.3supp.html">mutexes</a> and
<a href="nng_cv_alloc.3supp.html">condition variables</a>.
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_return_values">RETURN VALUES</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This function returns 0 on success, and non-zero otherwise.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_errors">ERRORS</h2>
<div class="sectionbody">
<div class="hdlist">
<table>
<tr>
<td class="hdlist1">
<code>NNG_ENOMEM</code>
</td>
<td class="hdlist2">
<p>Insufficient free memory exists.</p>
</td>
</tr>
</table>
</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_strerror.3.html">nng_strerror(3)</a>,
<a href="nng_cv_alloc.3supp.html">nng_cv_alloc(3supp)</a>,
<a href="nng_mtx_alloc.3supp.html">nng_mtx_alloc(3supp)</a>,
<a href="nng_thread_destroy.3supp.html">nng_thread_destroy(3supp)</a>,
<a href="nng_aio.5.html">nng_aio(5)</a>,
<a href="nng.7.html">nng(7)</a></p>
</div>
</div>
</div>
|