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"><</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">></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"><</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">></span> 42 <span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">Fn</span> <span class="special">&&,</span> <span class="identifier">Args</span> <span class="special">&&</span> <span class="special">...);</span> 43 44 <span class="keyword">template</span><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">></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">&&,</span> <span class="identifier">Args</span> <span class="special">&&</span> <span class="special">...);</span> 46 47 <span class="keyword">template</span><span class="special"><</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">></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">&&,</span> <span class="identifier">Args</span> <span class="special">&&</span> <span class="special">...);</span> 49 50 <span class="keyword">template</span><span class="special"><</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">></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">&&,</span> <span class="identifier">Args</span> <span class="special">&&</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">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 56 57 <span class="identifier">fiber</span> <span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&)</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">&&)</span> <span class="keyword">noexcept</span><span class="special">;</span> 60 61 <span class="identifier">fiber</span> <span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">fiber</span> <span class="special">&&)</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">&)</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"><</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">></span> 74 <span class="identifier">PROPS</span> <span class="special">&</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"><(</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&,</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&)</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">&,</span> <span class="identifier">fiber</span> <span class="special">&)</span> <span class="keyword">noexcept</span><span class="special">;</span> 80 81<span class="keyword">template</span><span class="special"><</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">></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">&&</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">-></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"><</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">></span> 118<span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">Fn</span> <span class="special">&&</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&&</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span> 119 120<span class="keyword">template</span><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">></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">&&</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&&</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span> 122 123<span class="keyword">template</span><span class="special"><</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">></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">&&</span> <span class="identifier">salloc</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&&</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&&</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span> 125 126<span class="keyword">template</span><span class="special"><</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">></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">&&</span> <span class="identifier">salloc</span><span class="special">,</span> 128 <span class="identifier">Fn</span> <span class="special">&&</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&&</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">&&</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">&</span> <span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">fiber</span> <span class="special">&&</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">-></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">-></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"><</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">></span> 397<span class="identifier">PROPS</span> <span class="special">&</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<></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<></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">&</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">-></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">-></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">&</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">fiber</span> <span class="special">&</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<_bridgehead"></a> 492 <span class="phrase"><a name="operator<"></a></span> 493 <a class="link" href="fiber.html#operator<">Non-member function <code class="computeroutput">operator<()</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"><(</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&</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"><</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"><</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">></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">&&</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