]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/fiber/doc/html/fiber/fiber_mgmt/fiber.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / fiber / doc / html / fiber / fiber_mgmt / fiber.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Class fiber</title>
5 <link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
7 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Fiber">
8 <link rel="up" href="../fiber_mgmt.html" title="Fiber management">
9 <link rel="prev" href="../fiber_mgmt.html" title="Fiber management">
10 <link rel="next" href="id.html" title="Class fiber::id">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../fiber_mgmt.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fiber_mgmt.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="id.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="fiber.fiber_mgmt.fiber"></a><a name="class_fiber"></a><a class="link" href="fiber.html" title="Class fiber">Class
28 <code class="computeroutput"><span class="identifier">fiber</span></code></a>
29 </h3></div></div></div>
30 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fiber</span><span class="special">/</span><span class="identifier">fiber</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
31
32 <span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
33 <span class="keyword">namespace</span> <span class="identifier">fibers</span> <span class="special">{</span>
34
35 <span class="keyword">class</span> <span class="identifier">fiber</span> <span class="special">{</span>
36 <span class="keyword">public</span><span class="special">:</span>
37 <span class="keyword">class</span> <span class="identifier">id</span><span class="special">;</span>
38
39 <span class="keyword">constexpr</span> <span class="identifier">fiber</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span>
40
41 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
42 <span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...);</span>
43
44 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
45 <span class="identifier">fiber</span><span class="special">(</span> <a class="link" href="../fiber_mgmt.html#class_launch"><code class="computeroutput"><span class="identifier">launch</span></code></a><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...);</span>
46
47 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <a class="link" href="../stack.html#stack_allocator_concept"><code class="computeroutput"><span class="identifier">StackAllocator</span></code></a><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
48 <span class="identifier">fiber</span><span class="special">(</span> <a href="http://en.cppreference.com/w/cpp/memory/allocator_arg_t" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span></code></a><span class="special">,</span> <span class="identifier">StackAllocator</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...);</span>
49
50 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <a class="link" href="../stack.html#stack_allocator_concept"><code class="computeroutput"><span class="identifier">StackAllocator</span></code></a><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
51 <span class="identifier">fiber</span><span class="special">(</span> <a class="link" href="../fiber_mgmt.html#class_launch"><code class="computeroutput"><span class="identifier">launch</span></code></a><span class="special">,</span> <a href="http://en.cppreference.com/w/cpp/memory/allocator_arg_t" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span></code></a><span class="special">,</span> <span class="identifier">StackAllocator</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...);</span>
52
53 <span class="special">~</span><span class="identifier">fiber</span><span class="special">();</span>
54
55 <span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
56
57 <span class="identifier">fiber</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
58
59 <span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">fiber</span> <span class="special">&amp;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
60
61 <span class="identifier">fiber</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">fiber</span> <span class="special">&amp;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
62
63 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">fiber</span> <span class="special">&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
64
65 <span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
66
67 <span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
68
69 <span class="keyword">void</span> <span class="identifier">detach</span><span class="special">();</span>
70
71 <span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
72
73 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">&gt;</span>
74 <span class="identifier">PROPS</span> <span class="special">&amp;</span> <span class="identifier">properties</span><span class="special">();</span>
75 <span class="special">};</span>
76
77 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
78
79 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">fiber</span> <span class="special">&amp;,</span> <span class="identifier">fiber</span> <span class="special">&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
80
81 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">SchedAlgo</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
82 <span class="keyword">void</span> <span class="identifier">use_scheduling_algorithm</span><span class="special">(</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...)</span> <span class="keyword">noexcept</span><span class="special">;</span>
83
84 <span class="keyword">bool</span> <span class="identifier">has_ready_fibers</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span>
85
86 <span class="special">}}</span>
87 </pre>
88 <h5>
89 <a name="fiber.fiber_mgmt.fiber.h0"></a>
90 <span><a name="fiber.fiber_mgmt.fiber.default_constructor"></a></span><a class="link" href="fiber.html#fiber.fiber_mgmt.fiber.default_constructor">Default
91 constructor</a>
92 </h5>
93 <pre class="programlisting"><span class="keyword">constexpr</span> <span class="identifier">fiber</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span>
94 </pre>
95 <div class="variablelist">
96 <p class="title"><b></b></p>
97 <dl>
98 <dt><span class="term">Effects:</span></dt>
99 <dd><p>
100 Constructs a <a class="link" href="fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> instance that refers to <span class="emphasis"><em>not-a-fiber</em></span>.
101 </p></dd>
102 <dt><span class="term">Postconditions:</span></dt>
103 <dd><p>
104 <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()</span>
105 <span class="special">==</span> <span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>
106 </p></dd>
107 <dt><span class="term">Throws:</span></dt>
108 <dd><p>
109 Nothing
110 </p></dd>
111 </dl>
112 </div>
113 <a name="fiber_fiber"></a><h5>
114 <a name="fiber.fiber_mgmt.fiber.h1"></a>
115 <span><a name="fiber.fiber_mgmt.fiber.constructor"></a></span><a class="link" href="fiber.html#fiber.fiber_mgmt.fiber.constructor">Constructor</a>
116 </h5>
117 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
118 <span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
119
120 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
121 <span class="identifier">fiber</span><span class="special">(</span> <a class="link" href="../fiber_mgmt.html#class_launch"><code class="computeroutput"><span class="identifier">launch</span></code></a> <span class="identifier">policy</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
122
123 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <a class="link" href="../stack.html#stack_allocator_concept"><code class="computeroutput"><span class="identifier">StackAllocator</span></code></a><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
124 <span class="identifier">fiber</span><span class="special">(</span> <a href="http://en.cppreference.com/w/cpp/memory/allocator_arg_t" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span></code></a><span class="special">,</span> <span class="identifier">StackAllocator</span> <span class="identifier">salloc</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
125
126 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <a class="link" href="../stack.html#stack_allocator_concept"><code class="computeroutput"><span class="identifier">StackAllocator</span></code></a><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
127 <span class="identifier">fiber</span><span class="special">(</span> <a class="link" href="../fiber_mgmt.html#class_launch"><code class="computeroutput"><span class="identifier">launch</span></code></a> <span class="identifier">policy</span><span class="special">,</span> <a href="http://en.cppreference.com/w/cpp/memory/allocator_arg_t" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span></code></a><span class="special">,</span> <span class="identifier">StackAllocator</span> <span class="identifier">salloc</span><span class="special">,</span>
128 <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
129 </pre>
130 <div class="variablelist">
131 <p class="title"><b></b></p>
132 <dl>
133 <dt><span class="term">Preconditions:</span></dt>
134 <dd><p>
135 <code class="computeroutput"><span class="identifier">Fn</span></code> must be copyable
136 or movable.
137 </p></dd>
138 <dt><span class="term">Effects:</span></dt>
139 <dd><p>
140 <code class="computeroutput"><span class="identifier">fn</span></code> is copied or moved
141 into internal storage for access by the new fiber. If <a class="link" href="../fiber_mgmt.html#class_launch"><code class="computeroutput">launch</code></a> is
142 specified (or defaulted) to <code class="computeroutput"><span class="identifier">post</span></code>,
143 the new fiber is marked <span class="quote">&#8220;<span class="quote">ready</span>&#8221;</span> and will be entered at
144 the next opportunity. If <code class="computeroutput"><span class="identifier">launch</span></code>
145 is specified as <code class="computeroutput"><span class="identifier">dispatch</span></code>,
146 the calling fiber is suspended and the new fiber is entered immediately.
147 </p></dd>
148 <dt><span class="term">Postconditions:</span></dt>
149 <dd><p>
150 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
151 refers to the newly created fiber of execution.
152 </p></dd>
153 <dt><span class="term">Throws:</span></dt>
154 <dd><p>
155 <code class="computeroutput"><span class="identifier">fiber_error</span></code> if an error
156 occurs.
157 </p></dd>
158 <dt><span class="term">Note:</span></dt>
159 <dd><p>
160 <a class="link" href="../stack.html#stack_allocator_concept"><code class="computeroutput"><span class="identifier">StackAllocator</span></code></a>
161 is required to allocate a stack for the internal <a href="http://www.boost.org/doc/libs/release/libs/context/doc/html/context/econtext.html" target="_top"><span class="emphasis"><em>execution_context</em></span></a>.
162 If <code class="computeroutput"><span class="identifier">StackAllocator</span></code> is
163 not explicitly passed, the default stack allocator depends on <code class="computeroutput"><span class="identifier">BOOST_USE_SEGMENTED_STACKS</span></code>: if defined,
164 you will get a <a class="link" href="../stack.html#class_segmented_stack"><code class="computeroutput">segmented_stack</code></a>, else a <a class="link" href="../stack.html#class_fixedsize_stack"><code class="computeroutput">fixedsize_stack</code></a>.
165 </p></dd>
166 <dt><span class="term">See also:</span></dt>
167 <dd><p>
168 <a href="http://en.cppreference.com/w/cpp/memory/allocator_arg_t" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span></code></a>, <a class="link" href="../stack.html#stack">Stack
169 allocation</a>
170 </p></dd>
171 </dl>
172 </div>
173 <h5>
174 <a name="fiber.fiber_mgmt.fiber.h2"></a>
175 <span><a name="fiber.fiber_mgmt.fiber.move_constructor"></a></span><a class="link" href="fiber.html#fiber.fiber_mgmt.fiber.move_constructor">Move
176 constructor</a>
177 </h5>
178 <pre class="programlisting"><span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">fiber</span> <span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
179 </pre>
180 <div class="variablelist">
181 <p class="title"><b></b></p>
182 <dl>
183 <dt><span class="term">Effects:</span></dt>
184 <dd><p>
185 Transfers ownership of the fiber managed by <code class="computeroutput"><span class="identifier">other</span></code>
186 to the newly constructed <a class="link" href="fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> instance.
187 </p></dd>
188 <dt><span class="term">Postconditions:</span></dt>
189 <dd><p>
190 <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span>
191 <span class="special">==</span> <span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code> returns the value of <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code>
192 prior to the construction
193 </p></dd>
194 <dt><span class="term">Throws:</span></dt>
195 <dd><p>
196 Nothing
197 </p></dd>
198 </dl>
199 </div>
200 <h5>
201 <a name="fiber.fiber_mgmt.fiber.h3"></a>
202 <span><a name="fiber.fiber_mgmt.fiber.move_assignment_operator"></a></span><a class="link" href="fiber.html#fiber.fiber_mgmt.fiber.move_assignment_operator">Move
203 assignment operator</a>
204 </h5>
205 <pre class="programlisting"><span class="identifier">fiber</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">fiber</span> <span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
206 </pre>
207 <div class="variablelist">
208 <p class="title"><b></b></p>
209 <dl>
210 <dt><span class="term">Effects:</span></dt>
211 <dd><p>
212 Transfers ownership of the fiber managed by <code class="computeroutput"><span class="identifier">other</span></code>
213 (if any) to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
214 </p></dd>
215 <dt><span class="term">Postconditions:</span></dt>
216 <dd><p>
217 <code class="computeroutput"><span class="identifier">other</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()</span>
218 <span class="special">==</span> <span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code> returns the value of <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code>
219 prior to the assignment.
220 </p></dd>
221 <dt><span class="term">Throws:</span></dt>
222 <dd><p>
223 Nothing
224 </p></dd>
225 </dl>
226 </div>
227 <h5>
228 <a name="fiber.fiber_mgmt.fiber.h4"></a>
229 <span><a name="fiber.fiber_mgmt.fiber.destructor"></a></span><a class="link" href="fiber.html#fiber.fiber_mgmt.fiber.destructor">Destructor</a>
230 </h5>
231 <pre class="programlisting"><span class="special">~</span><span class="identifier">fiber</span><span class="special">();</span>
232 </pre>
233 <div class="variablelist">
234 <p class="title"><b></b></p>
235 <dl>
236 <dt><span class="term">Effects:</span></dt>
237 <dd><p>
238 If the fiber is <a class="link" href="fiber.html#fiber_joinable"><code class="computeroutput">fiber::joinable()</code></a>, calls std::terminate.
239 Destroys <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
240 </p></dd>
241 <dt><span class="term">Note:</span></dt>
242 <dd><p>
243 The programmer must ensure that the destructor is never executed while
244 the fiber is still <a class="link" href="fiber.html#fiber_joinable"><code class="computeroutput">fiber::joinable()</code></a>. Even if you know
245 that the fiber has completed, you must still call either <a class="link" href="fiber.html#fiber_join"><code class="computeroutput">fiber::join()</code></a> or
246 <a class="link" href="fiber.html#fiber_detach"><code class="computeroutput">fiber::detach()</code></a> before destroying the <code class="computeroutput"><span class="identifier">fiber</span></code>
247 object.
248 </p></dd>
249 </dl>
250 </div>
251 <p>
252 </p>
253 <h5>
254 <a name="fiber_joinable_bridgehead"></a>
255 <span><a name="fiber_joinable"></a></span>
256 <a class="link" href="fiber.html#fiber_joinable">Member function <code class="computeroutput">joinable</code>()</a>
257 </h5>
258 <p>
259 </p>
260 <pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
261 </pre>
262 <div class="variablelist">
263 <p class="title"><b></b></p>
264 <dl>
265 <dt><span class="term">Returns:</span></dt>
266 <dd><p>
267 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
268 refers to a fiber of execution, which may or may not have completed;
269 otherwise <code class="computeroutput"><span class="keyword">false</span></code>.
270 </p></dd>
271 <dt><span class="term">Throws:</span></dt>
272 <dd><p>
273 Nothing
274 </p></dd>
275 </dl>
276 </div>
277 <p>
278 </p>
279 <h5>
280 <a name="fiber_join_bridgehead"></a>
281 <span><a name="fiber_join"></a></span>
282 <a class="link" href="fiber.html#fiber_join">Member function <code class="computeroutput">join</code>()</a>
283 </h5>
284 <p>
285 </p>
286 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
287 </pre>
288 <div class="variablelist">
289 <p class="title"><b></b></p>
290 <dl>
291 <dt><span class="term">Preconditions:</span></dt>
292 <dd><p>
293 the fiber is <a class="link" href="fiber.html#fiber_joinable"><code class="computeroutput">fiber::joinable()</code></a>.
294 </p></dd>
295 <dt><span class="term">Effects:</span></dt>
296 <dd><p>
297 Waits for the referenced fiber of execution to complete.
298 </p></dd>
299 <dt><span class="term">Postconditions:</span></dt>
300 <dd><p>
301 The fiber of execution referenced on entry has completed. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
302 no longer refers to any fiber of execution.
303 </p></dd>
304 <dt><span class="term">Throws:</span></dt>
305 <dd><p>
306 <code class="computeroutput"><span class="identifier">fiber_error</span></code>
307 </p></dd>
308 <dt><span class="term">Error Conditions:</span></dt>
309 <dd><p>
310 <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if
311 <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()</span>
312 <span class="special">==</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_fiber</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code>. <span class="bold"><strong>invalid_argument</strong></span>:
313 if the fiber is not <a class="link" href="fiber.html#fiber_joinable"><code class="computeroutput">fiber::joinable()</code></a>.
314 </p></dd>
315 </dl>
316 </div>
317 <p>
318 </p>
319 <h5>
320 <a name="fiber_detach_bridgehead"></a>
321 <span><a name="fiber_detach"></a></span>
322 <a class="link" href="fiber.html#fiber_detach">Member function <code class="computeroutput">detach</code>()</a>
323 </h5>
324 <p>
325 </p>
326 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">detach</span><span class="special">();</span>
327 </pre>
328 <div class="variablelist">
329 <p class="title"><b></b></p>
330 <dl>
331 <dt><span class="term">Preconditions:</span></dt>
332 <dd><p>
333 the fiber is <a class="link" href="fiber.html#fiber_joinable"><code class="computeroutput">fiber::joinable()</code></a>.
334 </p></dd>
335 <dt><span class="term">Effects:</span></dt>
336 <dd><p>
337 The fiber of execution becomes detached, and no longer has an associated
338 <a class="link" href="fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object.
339 </p></dd>
340 <dt><span class="term">Postconditions:</span></dt>
341 <dd><p>
342 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
343 no longer refers to any fiber of execution.
344 </p></dd>
345 <dt><span class="term">Throws:</span></dt>
346 <dd><p>
347 <code class="computeroutput"><span class="identifier">fiber_error</span></code>
348 </p></dd>
349 <dt><span class="term">Error Conditions:</span></dt>
350 <dd><p>
351 <span class="bold"><strong>invalid_argument</strong></span>: if the fiber is
352 not <a class="link" href="fiber.html#fiber_joinable"><code class="computeroutput">fiber::joinable()</code></a>.
353 </p></dd>
354 </dl>
355 </div>
356 <p>
357 </p>
358 <h5>
359 <a name="fiber_get_id_bridgehead"></a>
360 <span><a name="fiber_get_id"></a></span>
361 <a class="link" href="fiber.html#fiber_get_id">Member function <code class="computeroutput">get_id</code>()</a>
362 </h5>
363 <p>
364 </p>
365 <pre class="programlisting"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
366 </pre>
367 <div class="variablelist">
368 <p class="title"><b></b></p>
369 <dl>
370 <dt><span class="term">Returns:</span></dt>
371 <dd><p>
372 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
373 refers to a fiber of execution, an instance of <a class="link" href="../fiber_mgmt.html#class_fiber_id"><code class="computeroutput"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span></code></a> that represents that fiber. Otherwise
374 returns a default-constructed <a class="link" href="../fiber_mgmt.html#class_fiber_id"><code class="computeroutput"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span></code></a>.
375 </p></dd>
376 <dt><span class="term">Throws:</span></dt>
377 <dd><p>
378 Nothing
379 </p></dd>
380 <dt><span class="term">See also:</span></dt>
381 <dd><p>
382 <a class="link" href="this_fiber.html#this_fiber_get_id"><code class="computeroutput">this_fiber::get_id()</code></a>
383 </p></dd>
384 </dl>
385 </div>
386 <p>
387 </p>
388 <h5>
389 <a name="fiber_properties_bridgehead"></a>
390 <span><a name="fiber_properties"></a></span>
391 <a class="link" href="fiber.html#fiber_properties">Templated member
392 function <code class="computeroutput">properties</code>()</a>
393 </h5>
394 <p>
395 </p>
396 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">&gt;</span>
397 <span class="identifier">PROPS</span> <span class="special">&amp;</span> <span class="identifier">properties</span><span class="special">();</span>
398 </pre>
399 <div class="variablelist">
400 <p class="title"><b></b></p>
401 <dl>
402 <dt><span class="term">Preconditions:</span></dt>
403 <dd><p>
404 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
405 refers to a fiber of execution. <a class="link" href="fiber.html#use_scheduling_algorithm"><code class="computeroutput">use_scheduling_algorithm()</code></a> has
406 been called from this thread with a subclass of <a class="link" href="../scheduling.html#class_algorithm_with_properties"><code class="computeroutput">algorithm_with_properties&lt;&gt;</code></a> with
407 the same template argument <code class="computeroutput"><span class="identifier">PROPS</span></code>.
408 </p></dd>
409 <dt><span class="term">Returns:</span></dt>
410 <dd><p>
411 a reference to the scheduler properties instance for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
412 </p></dd>
413 <dt><span class="term">Throws:</span></dt>
414 <dd><p>
415 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_cast</span></code> if <code class="computeroutput"><span class="identifier">use_scheduling_algorithm</span><span class="special">()</span></code> was called with a <code class="computeroutput"><span class="identifier">algorithm_with_properties</span></code>
416 subclass with some other template parameter than <code class="computeroutput"><span class="identifier">PROPS</span></code>.
417 </p></dd>
418 <dt><span class="term">Note:</span></dt>
419 <dd><p>
420 <a class="link" href="../scheduling.html#class_algorithm_with_properties"><code class="computeroutput">algorithm_with_properties&lt;&gt;</code></a> provides
421 a way for a user-coded scheduler to associate extended properties,
422 such as priority, with a fiber instance. This method allows access
423 to those user-provided properties.
424 </p></dd>
425 <dt><span class="term">See also:</span></dt>
426 <dd><p>
427 <a class="link" href="../custom.html#custom">Customization</a>
428 </p></dd>
429 </dl>
430 </div>
431 <p>
432 </p>
433 <h5>
434 <a name="fiber_swap_bridgehead"></a>
435 <span><a name="fiber_swap"></a></span>
436 <a class="link" href="fiber.html#fiber_swap">Member function <code class="computeroutput">swap</code>()</a>
437 </h5>
438 <p>
439 </p>
440 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">fiber</span> <span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
441 </pre>
442 <div class="variablelist">
443 <p class="title"><b></b></p>
444 <dl>
445 <dt><span class="term">Effects:</span></dt>
446 <dd><p>
447 Exchanges the fiber of execution associated with <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="identifier">other</span></code>,
448 so <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
449 becomes associated with the fiber formerly associated with <code class="computeroutput"><span class="identifier">other</span></code>, and vice-versa.
450 </p></dd>
451 <dt><span class="term">Postconditions:</span></dt>
452 <dd><p>
453 <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()</span></code>
454 returns the same value as <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code> prior to the call. <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code>
455 returns the same value as <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()</span></code> prior to the call.
456 </p></dd>
457 <dt><span class="term">Throws:</span></dt>
458 <dd><p>
459 Nothing
460 </p></dd>
461 </dl>
462 </div>
463 <p>
464 </p>
465 <h5>
466 <a name="swap_for_fiber_bridgehead"></a>
467 <span><a name="swap_for_fiber"></a></span>
468 <a class="link" href="fiber.html#swap_for_fiber">Non-member function
469 <code class="computeroutput">swap()</code></a>
470 </h5>
471 <p>
472 </p>
473 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">fiber</span> <span class="special">&amp;</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">fiber</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
474 </pre>
475 <div class="variablelist">
476 <p class="title"><b></b></p>
477 <dl>
478 <dt><span class="term">Effects:</span></dt>
479 <dd><p>
480 Same as <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span> <span class="identifier">r</span><span class="special">)</span></code>.
481 </p></dd>
482 <dt><span class="term">Throws:</span></dt>
483 <dd><p>
484 Nothing
485 </p></dd>
486 </dl>
487 </div>
488 <p>
489 </p>
490 <h5>
491 <a name="operator&lt;_bridgehead"></a>
492 <span><a name="operator&lt;"></a></span>
493 <a class="link" href="fiber.html#operator&lt;">Non-member function <code class="computeroutput">operator&lt;()</code></a>
494 </h5>
495 <p>
496 </p>
497 <pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
498 </pre>
499 <div class="variablelist">
500 <p class="title"><b></b></p>
501 <dl>
502 <dt><span class="term">Returns:</span></dt>
503 <dd><p>
504 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">l</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span>
505 <span class="special">&lt;</span> <span class="identifier">r</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>,
506 false otherwise.
507 </p></dd>
508 <dt><span class="term">Throws:</span></dt>
509 <dd><p>
510 Nothing.
511 </p></dd>
512 </dl>
513 </div>
514 <p>
515 </p>
516 <h5>
517 <a name="use_scheduling_algorithm_bridgehead"></a>
518 <span><a name="use_scheduling_algorithm"></a></span>
519 <a class="link" href="fiber.html#use_scheduling_algorithm">Non-member
520 function <code class="computeroutput">use_scheduling_algorithm()</code></a>
521 </h5>
522 <p>
523 </p>
524 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">SchedAlgo</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
525 <span class="keyword">void</span> <span class="identifier">use_scheduling_algorithm</span><span class="special">(</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
526 </pre>
527 <div class="variablelist">
528 <p class="title"><b></b></p>
529 <dl>
530 <dt><span class="term">Effects:</span></dt>
531 <dd><p>
532 Directs <span class="bold"><strong>Boost.Fiber</strong></span> to use <code class="computeroutput"><span class="identifier">SchedAlgo</span></code>, which must be a concrete
533 subclass of <a class="link" href="../scheduling.html#class_algorithm"><code class="computeroutput">algorithm</code></a>, as the scheduling algorithm for
534 all fibers in the current thread. Pass any required <code class="computeroutput"><span class="identifier">SchedAlgo</span></code>
535 constructor arguments as <code class="computeroutput"><span class="identifier">args</span></code>.
536 </p></dd>
537 <dt><span class="term">Note:</span></dt>
538 <dd><p>
539 If you want a given thread to use a non-default scheduling algorithm,
540 make that thread call <code class="computeroutput"><span class="identifier">use_scheduling_algorithm</span><span class="special">()</span></code> before any other <span class="bold"><strong>Boost.Fiber</strong></span>
541 entry point. If no scheduler has been set for the current thread by
542 the time <span class="bold"><strong>Boost.Fiber</strong></span> needs to use
543 it, the library will create a default <a class="link" href="../scheduling.html#class_round_robin"><code class="computeroutput">round_robin</code></a> instance
544 for this thread.
545 </p></dd>
546 <dt><span class="term">Throws:</span></dt>
547 <dd><p>
548 Nothing
549 </p></dd>
550 <dt><span class="term">See also:</span></dt>
551 <dd><p>
552 <a class="link" href="../scheduling.html#scheduling">Scheduling</a>, <a class="link" href="../custom.html#custom">Customization</a>
553 </p></dd>
554 </dl>
555 </div>
556 <p>
557 </p>
558 <h5>
559 <a name="has_ready_fibers_bridgehead"></a>
560 <span><a name="has_ready_fibers"></a></span>
561 <a class="link" href="fiber.html#has_ready_fibers">Non-member function
562 <code class="computeroutput">has_ready_fibers()</code></a>
563 </h5>
564 <p>
565 </p>
566 <pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">has_ready_fibers</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span>
567 </pre>
568 <div class="variablelist">
569 <p class="title"><b></b></p>
570 <dl>
571 <dt><span class="term">Returns:</span></dt>
572 <dd><p>
573 <code class="computeroutput"><span class="keyword">true</span></code> if scheduler has
574 fibers ready to run.
575 </p></dd>
576 <dt><span class="term">Throws:</span></dt>
577 <dd><p>
578 Nothing
579 </p></dd>
580 <dt><span class="term">Note:</span></dt>
581 <dd><p>
582 Can be used for work-stealing to find an idle scheduler.
583 </p></dd>
584 </dl>
585 </div>
586 </div>
587 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
588 <td align="left"></td>
589 <td align="right"><div class="copyright-footer">Copyright &#169; 2013 Oliver Kowalke<p>
590 Distributed under the Boost Software License, Version 1.0. (See accompanying
591 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
592 </p>
593 </div></td>
594 </tr></table>
595 <hr>
596 <div class="spirit-nav">
597 <a accesskey="p" href="../fiber_mgmt.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fiber_mgmt.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="id.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
598 </div>
599 </body>
600 </html>