3 <meta http-equiv=
"Content-Type" content=
"text/html; charset=US-ASCII">
4 <title>Class fiber
</title>
5 <link rel=
"stylesheet" href=
"../../../../../../doc/src/boostbook.css" type=
"text/css">
6 <meta name=
"generator" content=
"DocBook XSL Stylesheets V1.75.2">
7 <link rel=
"home" href=
"../../index.html" title=
"Chapter 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">
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>
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>
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>
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>
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>
39 <span class=
"keyword">constexpr
</span> <span class=
"identifier">fiber
</span><span class=
"special">()
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
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>
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>
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>
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>
53 <span class=
"special">~
</span><span class=
"identifier">fiber
</span><span class=
"special">();
</span>
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>
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>
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>
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>
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>
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>
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>
69 <span class=
"keyword">void
</span> <span class=
"identifier">detach
</span><span class=
"special">();
</span>
71 <span class=
"keyword">void
</span> <span class=
"identifier">join
</span><span class=
"special">();
</span>
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>
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>
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>
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>
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>
86 <span class=
"special">}}
</span>
89 <a name=
"fiber.fiber_mgmt.fiber.h0"></a>
90 <span><a name=
"fiber.fiber_mgmt.fiber.default_constructor"></a></span><a class=
"link" href=
"fiber.html#fiber.fiber_mgmt.fiber.default_constructor">Default
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>
95 <div class=
"variablelist">
96 <p class=
"title"><b></b></p>
98 <dt><span class=
"term">Effects:
</span></dt>
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>.
102 <dt><span class=
"term">Postconditions:
</span></dt>
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>
107 <dt><span class=
"term">Throws:
</span></dt>
113 <a name=
"fiber_fiber"></a><h5>
114 <a name=
"fiber.fiber_mgmt.fiber.h1"></a>
115 <span><a name=
"fiber.fiber_mgmt.fiber.constructor"></a></span><a class=
"link" href=
"fiber.html#fiber.fiber_mgmt.fiber.constructor">Constructor
</a>
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>
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>
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=
"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>
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=
"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>
130 <div class=
"variablelist">
131 <p class=
"title"><b></b></p>
133 <dt><span class=
"term">Preconditions:
</span></dt>
135 <code class=
"computeroutput"><span class=
"identifier">Fn
</span></code> must be copyable
138 <dt><span class=
"term">Effects:
</span></dt>
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.
148 <dt><span class=
"term">Postconditions:
</span></dt>
150 <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
151 refers to the newly created fiber of execution.
153 <dt><span class=
"term">Throws:
</span></dt>
155 <code class=
"computeroutput"><span class=
"identifier">fiber_error
</span></code> if an error
158 <dt><span class=
"term">Note:
</span></dt>
160 <a class=
"link" href=
"../stack.html#stack_allocator_concept"><code class=
"computeroutput"><span class=
"identifier">StackAllocator
</span></code></a>
161 is required to allocate a stack for the internal
<a href=
"http://www.boost.org/doc/libs/release/libs/context/doc/html/context/econtext.html" target=
"_top"><span class=
"emphasis"><em>execution_context
</em></span></a>.
162 If
<code class=
"computeroutput"><span class=
"identifier">StackAllocator
</span></code> is
163 not explicitly passed, the default stack allocator depends on
<code class=
"computeroutput"><span class=
"identifier">BOOST_USE_SEGMENTED_STACKS
</span></code>: if defined,
164 you will get a
<a class=
"link" href=
"../stack.html#class_segmented_stack"><code class=
"computeroutput">segmented_stack
</code></a>, else a
<a class=
"link" href=
"../stack.html#class_fixedsize_stack"><code class=
"computeroutput">fixedsize_stack
</code></a>.
166 <dt><span class=
"term">See also:
</span></dt>
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
174 <a name=
"fiber.fiber_mgmt.fiber.h2"></a>
175 <span><a name=
"fiber.fiber_mgmt.fiber.move_constructor"></a></span><a class=
"link" href=
"fiber.html#fiber.fiber_mgmt.fiber.move_constructor">Move
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>
180 <div class=
"variablelist">
181 <p class=
"title"><b></b></p>
183 <dt><span class=
"term">Effects:
</span></dt>
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.
188 <dt><span class=
"term">Postconditions:
</span></dt>
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
194 <dt><span class=
"term">Throws:
</span></dt>
201 <a name=
"fiber.fiber_mgmt.fiber.h3"></a>
202 <span><a name=
"fiber.fiber_mgmt.fiber.move_assignment_operator"></a></span><a class=
"link" href=
"fiber.html#fiber.fiber_mgmt.fiber.move_assignment_operator">Move
203 assignment operator
</a>
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>
207 <div class=
"variablelist">
208 <p class=
"title"><b></b></p>
210 <dt><span class=
"term">Effects:
</span></dt>
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>.
215 <dt><span class=
"term">Postconditions:
</span></dt>
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.
221 <dt><span class=
"term">Throws:
</span></dt>
228 <a name=
"fiber.fiber_mgmt.fiber.h4"></a>
229 <span><a name=
"fiber.fiber_mgmt.fiber.destructor"></a></span><a class=
"link" href=
"fiber.html#fiber.fiber_mgmt.fiber.destructor">Destructor
</a>
231 <pre class=
"programlisting"><span class=
"special">~
</span><span class=
"identifier">fiber
</span><span class=
"special">();
</span>
233 <div class=
"variablelist">
234 <p class=
"title"><b></b></p>
236 <dt><span class=
"term">Effects:
</span></dt>
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>.
241 <dt><span class=
"term">Note:
</span></dt>
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>
254 <a name=
"fiber_joinable_bridgehead"></a>
255 <span><a name=
"fiber_joinable"></a></span>
256 <a class=
"link" href=
"fiber.html#fiber_joinable">Member function
<code class=
"computeroutput">joinable
</code>()
</a>
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>
262 <div class=
"variablelist">
263 <p class=
"title"><b></b></p>
265 <dt><span class=
"term">Returns:
</span></dt>
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>.
271 <dt><span class=
"term">Throws:
</span></dt>
280 <a name=
"fiber_join_bridgehead"></a>
281 <span><a name=
"fiber_join"></a></span>
282 <a class=
"link" href=
"fiber.html#fiber_join">Member function
<code class=
"computeroutput">join
</code>()
</a>
286 <pre class=
"programlisting"><span class=
"keyword">void
</span> <span class=
"identifier">join
</span><span class=
"special">();
</span>
288 <div class=
"variablelist">
289 <p class=
"title"><b></b></p>
291 <dt><span class=
"term">Preconditions:
</span></dt>
293 the fiber is
<a class=
"link" href=
"fiber.html#fiber_joinable"><code class=
"computeroutput">fiber::joinable()
</code></a>.
295 <dt><span class=
"term">Effects:
</span></dt>
297 Waits for the referenced fiber of execution to complete.
299 <dt><span class=
"term">Postconditions:
</span></dt>
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.
304 <dt><span class=
"term">Throws:
</span></dt>
306 <code class=
"computeroutput"><span class=
"identifier">fiber_error
</span></code>
308 <dt><span class=
"term">Error Conditions:
</span></dt>
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>.
320 <a name=
"fiber_detach_bridgehead"></a>
321 <span><a name=
"fiber_detach"></a></span>
322 <a class=
"link" href=
"fiber.html#fiber_detach">Member function
<code class=
"computeroutput">detach
</code>()
</a>
326 <pre class=
"programlisting"><span class=
"keyword">void
</span> <span class=
"identifier">detach
</span><span class=
"special">();
</span>
328 <div class=
"variablelist">
329 <p class=
"title"><b></b></p>
331 <dt><span class=
"term">Preconditions:
</span></dt>
333 the fiber is
<a class=
"link" href=
"fiber.html#fiber_joinable"><code class=
"computeroutput">fiber::joinable()
</code></a>.
335 <dt><span class=
"term">Effects:
</span></dt>
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.
340 <dt><span class=
"term">Postconditions:
</span></dt>
342 <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
343 no longer refers to any fiber of execution.
345 <dt><span class=
"term">Throws:
</span></dt>
347 <code class=
"computeroutput"><span class=
"identifier">fiber_error
</span></code>
349 <dt><span class=
"term">Error Conditions:
</span></dt>
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>.
359 <a name=
"fiber_get_id_bridgehead"></a>
360 <span><a name=
"fiber_get_id"></a></span>
361 <a class=
"link" href=
"fiber.html#fiber_get_id">Member function
<code class=
"computeroutput">get_id
</code>()
</a>
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>
367 <div class=
"variablelist">
368 <p class=
"title"><b></b></p>
370 <dt><span class=
"term">Returns:
</span></dt>
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>.
376 <dt><span class=
"term">Throws:
</span></dt>
380 <dt><span class=
"term">See also:
</span></dt>
382 <a class=
"link" href=
"this_fiber.html#this_fiber_get_id"><code class=
"computeroutput">this_fiber::get_id()
</code></a>
389 <a name=
"fiber_properties_bridgehead"></a>
390 <span><a name=
"fiber_properties"></a></span>
391 <a class=
"link" href=
"fiber.html#fiber_properties">Templated member
392 function
<code class=
"computeroutput">properties
</code>()
</a>
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>
399 <div class=
"variablelist">
400 <p class=
"title"><b></b></p>
402 <dt><span class=
"term">Preconditions:
</span></dt>
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>.
409 <dt><span class=
"term">Returns:
</span></dt>
411 a reference to the scheduler properties instance for
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>.
413 <dt><span class=
"term">Throws:
</span></dt>
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>.
418 <dt><span class=
"term">Note:
</span></dt>
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.
425 <dt><span class=
"term">See also:
</span></dt>
427 <a class=
"link" href=
"../custom.html#custom">Customization
</a>
434 <a name=
"fiber_swap_bridgehead"></a>
435 <span><a name=
"fiber_swap"></a></span>
436 <a class=
"link" href=
"fiber.html#fiber_swap">Member function
<code class=
"computeroutput">swap
</code>()
</a>
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>
442 <div class=
"variablelist">
443 <p class=
"title"><b></b></p>
445 <dt><span class=
"term">Effects:
</span></dt>
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.
451 <dt><span class=
"term">Postconditions:
</span></dt>
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.
457 <dt><span class=
"term">Throws:
</span></dt>
466 <a name=
"swap_for_fiber_bridgehead"></a>
467 <span><a name=
"swap_for_fiber"></a></span>
468 <a class=
"link" href=
"fiber.html#swap_for_fiber">Non-member function
469 <code class=
"computeroutput">swap()
</code></a>
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>
475 <div class=
"variablelist">
476 <p class=
"title"><b></b></p>
478 <dt><span class=
"term">Effects:
</span></dt>
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>.
482 <dt><span class=
"term">Throws:
</span></dt>
491 <a name=
"operator<_bridgehead"></a>
492 <span><a name=
"operator<"></a></span>
493 <a class=
"link" href=
"fiber.html#operator<">Non-member function
<code class=
"computeroutput">operator
<()
</code></a>
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>
499 <div class=
"variablelist">
500 <p class=
"title"><b></b></p>
502 <dt><span class=
"term">Returns:
</span></dt>
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>,
508 <dt><span class=
"term">Throws:
</span></dt>
517 <a name=
"use_scheduling_algorithm_bridgehead"></a>
518 <span><a name=
"use_scheduling_algorithm"></a></span>
519 <a class=
"link" href=
"fiber.html#use_scheduling_algorithm">Non-member
520 function
<code class=
"computeroutput">use_scheduling_algorithm()
</code></a>
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>
527 <div class=
"variablelist">
528 <p class=
"title"><b></b></p>
530 <dt><span class=
"term">Effects:
</span></dt>
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>.
537 <dt><span class=
"term">Note:
</span></dt>
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
546 <dt><span class=
"term">Throws:
</span></dt>
550 <dt><span class=
"term">See also:
</span></dt>
552 <a class=
"link" href=
"../scheduling.html#scheduling">Scheduling
</a>,
<a class=
"link" href=
"../custom.html#custom">Customization
</a>
559 <a name=
"has_ready_fibers_bridgehead"></a>
560 <span><a name=
"has_ready_fibers"></a></span>
561 <a class=
"link" href=
"fiber.html#has_ready_fibers">Non-member function
562 <code class=
"computeroutput">has_ready_fibers()
</code></a>
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>
568 <div class=
"variablelist">
569 <p class=
"title"><b></b></p>
571 <dt><span class=
"term">Returns:
</span></dt>
573 <code class=
"computeroutput"><span class=
"keyword">true
</span></code> if scheduler has
576 <dt><span class=
"term">Throws:
</span></dt>
580 <dt><span class=
"term">Note:
</span></dt>
582 Can be used for work-stealing to find an idle scheduler.
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>)
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>