• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
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.79.1">
7<link rel="home" href="../../index.html" title="Chapter 1. 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">&amp;&amp;,</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">&amp;&amp;,</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 class="phrase"><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 class="variablelist">
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 class="phrase"><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="special">&amp;&amp;</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="special">&amp;&amp;</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 class="variablelist">
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">“<span class="quote">ready</span>”</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 __econtext__. If
162              <code class="computeroutput"><span class="identifier">StackAllocator</span></code> is not
163              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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 class="phrase"><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 class="variablelist">
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 © 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>
601