1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Fiber management</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="../index.html" title="Chapter 1. Fiber"> 9<link rel="prev" href="overview/implementations__fcontext_t__ucontext_t_and_winfiber.html" title="Implementations: fcontext_t, ucontext_t and WinFiber"> 10<link rel="next" href="fiber_mgmt/fiber.html" title="Class fiber"> 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="overview/implementations__fcontext_t__ucontext_t_and_winfiber.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="fiber_mgmt/fiber.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 27<a name="fiber.fiber_mgmt"></a><a class="link" href="fiber_mgmt.html" title="Fiber management">Fiber management</a> 28</h2></div></div></div> 29<div class="toc"><dl class="toc"> 30<dt><span class="section"><a href="fiber_mgmt/fiber.html">Class 31 <code class="computeroutput"><span class="identifier">fiber</span></code></a></span></dt> 32<dt><span class="section"><a href="fiber_mgmt/id.html">Class fiber::id</a></span></dt> 33<dt><span class="section"><a href="fiber_mgmt/this_fiber.html">Namespace this_fiber</a></span></dt> 34</dl></div> 35<h4> 36<a name="fiber.fiber_mgmt.h0"></a> 37 <span class="phrase"><a name="fiber.fiber_mgmt.synopsis"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.synopsis">Synopsis</a> 38 </h4> 39<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">all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 40 41<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> 42<span class="keyword">namespace</span> <span class="identifier">fibers</span> <span class="special">{</span> 43 44<span class="keyword">class</span> <span class="identifier">fiber</span><span class="special">;</span> 45<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> 46<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> 47 48<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> 49<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> 50<span class="keyword">bool</span> <span class="identifier">has_ready_fibers</span><span class="special">();</span> 51 52<span class="keyword">namespace</span> <span class="identifier">algo</span> <span class="special">{</span> 53 54<span class="keyword">struct</span> <span class="identifier">algorithm</span><span class="special">;</span> 55<span class="keyword">template</span><span class="special"><</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">></span> 56<span class="keyword">struct</span> <span class="identifier">algorithm_with_properties</span><span class="special">;</span> 57<span class="keyword">class</span> <span class="identifier">round_robin</span><span class="special">;</span> 58<span class="keyword">class</span> <span class="identifier">shared_round_robin</span><span class="special">;</span> 59 60<span class="special">}}</span> 61 62<span class="keyword">namespace</span> <span class="identifier">this_fiber</span> <span class="special">{</span> 63 64<span class="identifier">fibers</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 65<span class="keyword">void</span> <span class="identifier">yield</span><span class="special">();</span> 66<span class="keyword">template</span><span class="special"><</span> <span class="keyword">typename</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span> <span class="special">></span> 67<span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special"><</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">abs_time</span><span class="special">)</span> 68<span class="keyword">template</span><span class="special"><</span> <span class="keyword">typename</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Period</span> <span class="special">></span> 69<span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special"><</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span> <span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rel_time</span><span class="special">);</span> 70<span class="keyword">template</span><span class="special"><</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">></span> 71<span class="identifier">PROPS</span> <span class="special">&</span> <span class="identifier">properties</span><span class="special">();</span> 72 73<span class="special">}</span> 74</pre> 75<h4> 76<a name="fiber.fiber_mgmt.h1"></a> 77 <span class="phrase"><a name="fiber.fiber_mgmt.tutorial"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.tutorial">Tutorial</a> 78 </h4> 79<p> 80 Each <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> represents a micro-thread which will be launched and managed 81 cooperatively by a scheduler. Objects of type <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> are move-only. 82 </p> 83<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f1</span><span class="special">;</span> <span class="comment">// not-a-fiber</span> 84 85<span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{</span> 86 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f2</span><span class="special">(</span> <span class="identifier">some_fn</span><span class="special">);</span> 87 88 <span class="identifier">f1</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span> <span class="identifier">f2</span><span class="special">);</span> <span class="comment">// f2 moved to f1</span> 89<span class="special">}</span> 90</pre> 91<h4> 92<a name="fiber.fiber_mgmt.h2"></a> 93 <span class="phrase"><a name="fiber.fiber_mgmt.launching"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.launching">Launching</a> 94 </h4> 95<p> 96 A new fiber is launched by passing an object of a callable type that can be 97 invoked with no parameters. If the object must not be copied or moved, then 98 <span class="emphasis"><em>std::ref</em></span> can be used to pass in a reference to the function 99 object. In this case, the user must ensure that the referenced object outlives 100 the newly-created fiber. 101 </p> 102<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">callable</span> <span class="special">{</span> 103 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()();</span> 104<span class="special">};</span> 105 106<span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">copies_are_safe</span><span class="special">()</span> <span class="special">{</span> 107 <span class="identifier">callable</span> <span class="identifier">x</span><span class="special">;</span> 108 <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">x</span><span class="special">);</span> 109<span class="special">}</span> <span class="comment">// x is destroyed, but the newly-created fiber has a copy, so this is OK</span> 110 111<span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">oops</span><span class="special">()</span> <span class="special">{</span> 112 <span class="identifier">callable</span> <span class="identifier">x</span><span class="special">;</span> 113 <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">);</span> 114<span class="special">}</span> <span class="comment">// x is destroyed, but the newly-created fiber still has a reference</span> 115 <span class="comment">// this leads to undefined behaviour</span> 116</pre> 117<p> 118 The spawned <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> does not immediately start running. It is enqueued 119 in the list of ready-to-run fibers, and will run when the scheduler gets around 120 to it. 121 </p> 122<a name="exceptions"></a><h4> 123<a name="fiber.fiber_mgmt.h3"></a> 124 <span class="phrase"><a name="fiber.fiber_mgmt.exceptions"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.exceptions">Exceptions</a> 125 </h4> 126<p> 127 An exception escaping from the function or callable object passed to the <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> 128constructor 129 calls <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>. 130 If you need to know which exception was thrown, use <a class="link" href="synchronization/futures/future.html#class_future"><code class="computeroutput">future<></code></a> or 131 <a class="link" href="synchronization/futures/packaged_task.html#class_packaged_task"><code class="computeroutput">packaged_task<></code></a>. 132 </p> 133<h4> 134<a name="fiber.fiber_mgmt.h4"></a> 135 <span class="phrase"><a name="fiber.fiber_mgmt.detaching"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.detaching">Detaching</a> 136 </h4> 137<p> 138 A <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> can be detached by explicitly invoking the <a class="link" href="fiber_mgmt/fiber.html#fiber_detach"><code class="computeroutput">fiber::detach()</code></a> member 139 function. After <a class="link" href="fiber_mgmt/fiber.html#fiber_detach"><code class="computeroutput">fiber::detach()</code></a> is called on a fiber object, that 140 object represents <span class="emphasis"><em>not-a-fiber</em></span>. The fiber object may then 141 safely be destroyed. 142 </p> 143<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">some_fn</span><span class="special">).</span><span class="identifier">detach</span><span class="special">();</span> 144</pre> 145<p> 146 <span class="bold"><strong>Boost.Fiber</strong></span> provides a number of ways to wait 147 for a running fiber to complete. You can coordinate even with a detached fiber 148 using a <a class="link" href="synchronization/mutex_types.html#class_mutex"><code class="computeroutput">mutex</code></a>, or <a class="link" href="synchronization/conditions.html#class_condition_variable"><code class="computeroutput">condition_variable</code></a>, or 149 any of the other <a class="link" href="synchronization.html#synchronization">synchronization objects</a> 150 provided by the library. 151 </p> 152<p> 153 If a detached fiber is still running when the thread’s main fiber terminates, 154 the thread will not shut down. 155 </p> 156<h4> 157<a name="fiber.fiber_mgmt.h5"></a> 158 <span class="phrase"><a name="fiber.fiber_mgmt.joining"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.joining">Joining</a> 159 </h4> 160<p> 161 In order to wait for a fiber to finish, the <a class="link" href="fiber_mgmt/fiber.html#fiber_join"><code class="computeroutput">fiber::join()</code></a> member function 162 of the <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object can be used. <a class="link" href="fiber_mgmt/fiber.html#fiber_join"><code class="computeroutput">fiber::join()</code></a> will block 163 until the <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object has completed. 164 </p> 165<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">some_fn</span><span class="special">()</span> <span class="special">{</span> 166 <span class="special">...</span> 167<span class="special">}</span> 168 169<span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f</span><span class="special">(</span> <span class="identifier">some_fn</span><span class="special">);</span> 170<span class="special">...</span> 171<span class="identifier">f</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span> 172</pre> 173<p> 174 If the fiber has already completed, then <a class="link" href="fiber_mgmt/fiber.html#fiber_join"><code class="computeroutput">fiber::join()</code></a> returns immediately 175 and the joined <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object becomes <span class="emphasis"><em>not-a-fiber</em></span>. 176 </p> 177<h4> 178<a name="fiber.fiber_mgmt.h6"></a> 179 <span class="phrase"><a name="fiber.fiber_mgmt.destruction"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.destruction">Destruction</a> 180 </h4> 181<p> 182 When a <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object representing a valid execution context (the fiber 183 is <a class="link" href="fiber_mgmt/fiber.html#fiber_joinable"><code class="computeroutput">fiber::joinable()</code></a>) is destroyed, the program terminates. If 184 you intend the fiber to outlive the <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object that launched it, 185 use the <a class="link" href="fiber_mgmt/fiber.html#fiber_detach"><code class="computeroutput">fiber::detach()</code></a> method. 186 </p> 187<pre class="programlisting"><span class="special">{</span> 188 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f</span><span class="special">(</span> <span class="identifier">some_fn</span><span class="special">);</span> 189<span class="special">}</span> <span class="comment">// std::terminate() will be called</span> 190 191<span class="special">{</span> 192 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">some_fn</span><span class="special">);</span> 193 <span class="identifier">f</span><span class="special">.</span><span class="identifier">detach</span><span class="special">();</span> 194<span class="special">}</span> <span class="comment">// okay, program continues</span> 195</pre> 196<a name="class_fiber_id"></a><h4> 197<a name="fiber.fiber_mgmt.h7"></a> 198 <span class="phrase"><a name="fiber.fiber_mgmt.fiber_ids"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.fiber_ids">Fiber 199 IDs</a> 200 </h4> 201<p> 202 Objects of class <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> can be 203 used to identify fibers. Each running <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> has a unique <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> obtainable 204 from the corresponding <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> 205by calling the <a class="link" href="fiber_mgmt/fiber.html#fiber_get_id"><code class="computeroutput">fiber::get_id()</code></a> member 206 function. Objects of class <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> can be 207 copied, and used as keys in associative containers: the full range of comparison 208 operators is provided. They can also be written to an output stream using the 209 stream insertion operator, though the output format is unspecified. 210 </p> 211<p> 212 Each 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> either 213 refers to some fiber, or <span class="emphasis"><em>not-a-fiber</em></span>. Instances that refer 214 to <span class="emphasis"><em>not-a-fiber</em></span> compare equal to each other, but not equal 215 to any instances that refer to an actual fiber. The comparison operators on 216 <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> yield a total order for every non-equal 217 <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>. 218 </p> 219<a name="class_launch"></a><h4> 220<a name="fiber.fiber_mgmt.h8"></a> 221 <span class="phrase"><a name="fiber.fiber_mgmt.enumeration__code__phrase_role__identifier__launch__phrase___code_"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.enumeration__code__phrase_role__identifier__launch__phrase___code_">Enumeration 222 <code class="computeroutput"><span class="identifier">launch</span></code></a> 223 </h4> 224<p> 225 <code class="computeroutput"><span class="identifier">launch</span></code> specifies whether control 226 passes immediately into a newly-launched fiber. 227 </p> 228<pre class="programlisting"><span class="keyword">enum</span> <span class="keyword">class</span> <span class="identifier">launch</span> <span class="special">{</span> 229 <span class="identifier">dispatch</span><span class="special">,</span> 230 <span class="identifier">post</span> 231<span class="special">};</span> 232</pre> 233<h4> 234<a name="fiber.fiber_mgmt.h9"></a> 235 <span class="phrase"><a name="fiber.fiber_mgmt._code__phrase_role__identifier__dispatch__phrase___code_"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt._code__phrase_role__identifier__dispatch__phrase___code_"><code class="computeroutput"><span class="identifier">dispatch</span></code></a> 236 </h4> 237<div class="variablelist"> 238<p class="title"><b></b></p> 239<dl class="variablelist"> 240<dt><span class="term">Effects:</span></dt> 241<dd><p> 242 A fiber launched with <code class="computeroutput"><span class="identifier">launch</span> 243 <span class="special">==</span> <span class="identifier">dispatch</span></code> 244 is entered immediately. In other words, launching a fiber with <code class="computeroutput"><span class="identifier">dispatch</span></code> suspends the caller (the previously-running 245 fiber) until the fiber scheduler has a chance to resume it later. 246 </p></dd> 247</dl> 248</div> 249<h4> 250<a name="fiber.fiber_mgmt.h10"></a> 251 <span class="phrase"><a name="fiber.fiber_mgmt._code__phrase_role__identifier__post__phrase___code_"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt._code__phrase_role__identifier__post__phrase___code_"><code class="computeroutput"><span class="identifier">post</span></code></a> 252 </h4> 253<div class="variablelist"> 254<p class="title"><b></b></p> 255<dl class="variablelist"> 256<dt><span class="term">Effects:</span></dt> 257<dd><p> 258 A fiber launched with <code class="computeroutput"><span class="identifier">launch</span> 259 <span class="special">==</span> <span class="identifier">post</span></code> 260 is passed to the fiber scheduler as ready, but it is not yet entered. 261 The caller (the previously-running fiber) continues executing. The newly-launched 262 fiber will be entered when the fiber scheduler has a chance to resume 263 it later. 264 </p></dd> 265<dt><span class="term">Note:</span></dt> 266<dd><p> 267 If <code class="computeroutput"><span class="identifier">launch</span></code> is not explicitly 268 specified, <code class="computeroutput"><span class="identifier">post</span></code> is the 269 default. 270 </p></dd> 271</dl> 272</div> 273</div> 274<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 275<td align="left"></td> 276<td align="right"><div class="copyright-footer">Copyright © 2013 Oliver Kowalke<p> 277 Distributed under the Boost Software License, Version 1.0. (See accompanying 278 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>) 279 </p> 280</div></td> 281</tr></table> 282<hr> 283<div class="spirit-nav"> 284<a accesskey="p" href="overview/implementations__fcontext_t__ucontext_t_and_winfiber.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="fiber_mgmt/fiber.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 285</div> 286</body> 287</html> 288