• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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">&lt;</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">&gt;</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">&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>
46<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>
47
48<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>
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">&amp;&amp;</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">&lt;</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">&gt;</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">&lt;</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">&gt;</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">&lt;</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">)</span>
68<span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span> <span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
70<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>
71<span class="identifier">PROPS</span> <span class="special">&amp;</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&lt;&gt;</code></a> or
131      <a class="link" href="synchronization/futures/packaged_task.html#class_packaged_task"><code class="computeroutput">packaged_task&lt;&gt;</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