summaryrefslogtreecommitdiff
path: root/doc/html/thread/thread_management.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/html/thread/thread_management.html')
-rw-r--r--[-rwxr-xr-x]doc/html/thread/thread_management.html1451
1 files changed, 1104 insertions, 347 deletions
diff --git a/doc/html/thread/thread_management.html b/doc/html/thread/thread_management.html
index 1e5962f5a2..3ba8a8088e 100755..100644
--- a/doc/html/thread/thread_management.html
+++ b/doc/html/thread/thread_management.html
@@ -5,7 +5,7 @@
<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
-<link rel="up" href="../thread.html" title="Chapter&#160;28.&#160;Thread">
+<link rel="up" href="../thread.html" title="Chapter&#160;28.&#160;Thread 3.0.1">
<link rel="prev" href="future.html" title="Future">
<link rel="next" href="synchronization.html" title="Synchronization">
</head>
@@ -27,28 +27,84 @@
<a name="thread.thread_management"></a><a class="link" href="thread_management.html" title="Thread Management">Thread Management</a>
</h2></div></div></div>
<div class="toc"><dl>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.synopsis">Synopsis</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial">Tutorial</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread">Class <code class="computeroutput"><span class="identifier">thread</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread">Namespace <code class="computeroutput"><span class="identifier">this_thread</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup">Class <code class="computeroutput"><span class="identifier">thread_group</span></code></a></span></dt>
</dl></div>
-<h4>
-<a name="thread.thread_management.h0"></a>
- <span><a name="thread.thread_management.synopsis"></a></span><a class="link" href="thread_management.html#thread.thread_management.synopsis">Synopsis</a>
- </h4>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thread.thread_management.synopsis"></a><a class="link" href="thread_management.html#thread.thread_management.synopsis" title="Synopsis">Synopsis</a>
+</h3></div></div></div>
+<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">namespace</span> <span class="identifier">boost</span>
+<span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">thread</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">lhs</span><span class="special">,</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">this_thread</span>
+ <span class="special">{</span>
+ <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">at_thread_exit</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span> <span class="comment">// EXTENSION</span>
+
+ <span class="keyword">void</span> <span class="identifier">interruption_point</span><span class="special">();</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_enabled</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION </span>
+ <span class="keyword">class</span> <span class="identifier">disable_interruption</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">class</span> <span class="identifier">restore_interruption</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+
+ <span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0</span>
+ <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="preprocessor">#endif</span>
+ <span class="special">}</span>
+ <span class="keyword">class</span> <span class="identifier">thread_group</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+
+<span class="special">}</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thread.thread_management.tutorial"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial" title="Tutorial">Tutorial</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.launching">Launching
+ threads</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.attributes">Thread
+ attributes</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.exceptions">Exceptions
+ in thread functions</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.join">Joining and
+ detaching</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.interruption">Interruption</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.id">Thread IDs</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.native_in">Using
+ native interfaces with Boost.Thread resources</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.native_from">Using
+ Boost.Thread interfaces in a native thread</a></span></dt>
+</dl></div>
<p>
- The <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- class is responsible for launching and managing threads. Each <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object represents a single thread of execution, or <span class="emphasis"><em>Not-a-Thread</em></span>,
- and at most one <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object represents a given thread of execution: objects of type <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- are not copyable.
- </p>
+ The <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
+ class is responsible for launching and managing threads. Each <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object represents a single
+ thread of execution, or <span class="emphasis"><em>Not-a-Thread</em></span>, and at most one
+ <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
+ object represents a given thread of execution: objects of type <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> are not copyable.
+ </p>
<p>
- Objects of type <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- are movable, however, so they can be stored in move-aware containers, and returned
- from functions. This allows the details of thread creation to be wrapped in
- a function.
- </p>
+ Objects of type <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> are movable, however, so
+ they can be stored in move-aware containers, and returned from functions.
+ This allows the details of thread creation to be wrapped in a function.
+ </p>
<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">make_thread</span><span class="special">();</span>
<span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span>
@@ -57,32 +113,40 @@
<span class="identifier">some_thread</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span>
<span class="special">}</span>
</pre>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top">
<p>
- [Note: On compilers that support rvalue references, <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- provides a proper move constructor and move-assignment operator, and therefore
- meets the C++0x <span class="emphasis"><em>MoveConstructible</em></span> and <span class="emphasis"><em>MoveAssignable</em></span>
- concepts. With such compilers, <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- can therefore be used with containers that support those concepts.
- </p>
+ On compilers that support rvalue references, <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> provides a proper move
+ constructor and move-assignment operator, and therefore meets the C++0x
+ <span class="emphasis"><em>MoveConstructible</em></span> and <span class="emphasis"><em>MoveAssignable</em></span>
+ concepts. With such compilers, <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> can therefore be used with
+ containers that support those concepts.
+ </p>
<p>
- For other compilers, move support is provided with a move emulation layer,
- so containers must explicitly detect that move emulation layer. See &lt;boost/thread/detail/move.hpp&gt;
- for details.]
- </p>
-<h4>
-<a name="thread.thread_management.h1"></a>
- <span><a name="thread.thread_management.launching_threads"></a></span><a class="link" href="thread_management.html#thread.thread_management.launching_threads">Launching
- threads</a>
- </h4>
+ For other compilers, move support is provided with a move emulation layer,
+ so containers must explicitly detect that move emulation layer. See &lt;boost/thread/detail/move.hpp&gt;
+ for details.
+ </p>
+</td></tr>
+</table></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.tutorial.launching"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.launching" title="Launching threads">Launching
+ threads</a>
+</h4></div></div></div>
<p>
- A new thread is launched by passing an object of a callable type that can be
- invoked with no parameters to the constructor. The object is then copied into
- internal storage, and invoked on the newly-created thread of execution. If
- the object must not (or cannot) be copied, then <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span></code> can
- be used to pass in a reference to the function object. In this case, the user
- of <span class="bold"><strong>Boost.Thread</strong></span> must ensure that the referred-to
- object outlives the newly-created thread of execution.
- </p>
+ A new thread is launched by passing an object of a callable type that can
+ be invoked with no parameters to the constructor. The object is then copied
+ into internal storage, and invoked on the newly-created thread of execution.
+ If the object must not (or cannot) be copied, then <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span></code>
+ can be used to pass in a reference to the function object. In this case,
+ the user of <span class="bold"><strong>Boost.Thread</strong></span> must ensure that
+ the referred-to object outlives the newly-created thread of execution.
+ </p>
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">callable</span>
<span class="special">{</span>
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()();</span>
@@ -102,88 +166,165 @@
<span class="comment">// this leads to undefined behaviour</span>
</pre>
<p>
- If you wish to construct an instance of <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- with a function or callable object that requires arguments to be supplied,
- this can be done by passing additional arguments to the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- constructor:
- </p>
+ If you wish to construct an instance of <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> with a function or callable
+ object that requires arguments to be supplied, this can be done by passing
+ additional arguments to the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> constructor:
+ </p>
<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">find_the_question</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">the_answer</span><span class="special">);</span>
<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">deep_thought_2</span><span class="special">(</span><span class="identifier">find_the_question</span><span class="special">,</span><span class="number">42</span><span class="special">);</span>
</pre>
<p>
- The arguments are <span class="emphasis"><em>copied</em></span> into the internal thread structure:
- if a reference is required, use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span></code>, just
- as for references to callable functions.
- </p>
+ The arguments are <span class="emphasis"><em>copied</em></span> into the internal thread
+ structure: if a reference is required, use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span></code>,
+ just as for references to callable functions.
+ </p>
+<p>
+ There is an unspecified limit on the number of additional arguments that
+ can be passed.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.tutorial.attributes"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.attributes" title="Thread attributes">Thread
+ attributes</a>
+</h4></div></div></div>
+<p>
+ Thread launched in this way are created with implementation defined thread
+ attributes as stack size, scheduling, priority, ... or any platform specific
+ attributes. It is not evident how to provide a portable interface that
+ allows the user to set the platform specific attributes. Boost.Thread stay
+ in the middle road through the class thread::attributes which allows to
+ set at least in a portable way the stack size as follows:
+ </p>
+<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span> <span class="identifier">attrs</span><span class="special">;</span>
+<span class="identifier">attrs</span><span class="special">.</span><span class="identifier">set_size</span><span class="special">(</span><span class="number">4096</span><span class="special">*</span><span class="number">10</span><span class="special">);</span>
+<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">deep_thought_2</span><span class="special">(</span><span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">find_the_question</span><span class="special">,</span> <span class="number">42</span><span class="special">);</span>
+</pre>
+<p>
+ Even for this simple attribute there could be portable issues as some platforms
+ could require that the stack size should have a minimal size and/or be
+ a multiple of a given page size. The library adapts the requested size
+ to the platform constraints so that the user doesn't need to take care
+ of it.
+ </p>
+<p>
+ This is the single attribute that is provided in a portable way. In order
+ to set any other thread attribute at construction time the user needs to
+ use non portable code.
+ </p>
<p>
- There is an unspecified limit on the number of additional arguments that can
- be passed.
- </p>
-<h4>
-<a name="thread.thread_management.h2"></a>
- <span><a name="thread.thread_management.exceptions_in_thread_functions"></a></span><a class="link" href="thread_management.html#thread.thread_management.exceptions_in_thread_functions">Exceptions
- in thread functions</a>
- </h4>
+ On PThread platforms the user will need to get the thread attributes handle
+ and use it for whatever attribute.
+ </p>
<p>
- If the function or callable object passed to the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- constructor propagates an exception when invoked that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>,
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>
- is called.
- </p>
-<h4>
-<a name="thread.thread_management.h3"></a>
- <span><a name="thread.thread_management.joining_and_detaching"></a></span><a class="link" href="thread_management.html#thread.thread_management.joining_and_detaching">Joining
- and detaching</a>
- </h4>
+ Next follows how the user could set the stack size and the scheduling policy
+ on PThread platforms.
+ </p>
+<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span> <span class="identifier">attrs</span><span class="special">;</span>
+<span class="comment">// set portable attributes</span>
+<span class="comment">// ...</span>
+<span class="identifier">attr</span><span class="special">.</span><span class="identifier">set_stack_size</span><span class="special">(</span><span class="number">4096</span><span class="special">*</span><span class="number">10</span><span class="special">);</span>
+<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_THREAD_PLATFORM_WIN32</span><span class="special">)</span>
+ <span class="comment">// ... window version</span>
+<span class="preprocessor">#elif</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_THREAD_PLATFORM_PTHREAD</span><span class="special">)</span>
+ <span class="comment">// ... pthread version</span>
+ <span class="identifier">pthread_attr_setschedpolicy</span><span class="special">(</span><span class="identifier">attr</span><span class="special">.</span><span class="identifier">get_native_handle</span><span class="special">(),</span> <span class="identifier">SCHED_RR</span><span class="special">);</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor">#error</span> <span class="string">"Boost threads unavailable on this platform"</span>
+<span class="preprocessor">#endif</span>
+<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">th</span><span class="special">(</span><span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">find_the_question</span><span class="special">,</span> <span class="number">42</span><span class="special">);</span>
+</pre>
<p>
- When the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object that represents a thread of execution is destroyed the thread becomes
- <span class="emphasis"><em>detached</em></span>. Once a thread is detached, it will continue
- executing until the invocation of the function or callable object supplied
- on construction has completed, or the program is terminated. A thread can also
- be detached by explicitly invoking the <a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()"><code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a>
- member function on the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object. In this case, the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object ceases to represent the now-detached thread, and instead represents
- <span class="emphasis"><em>Not-a-Thread</em></span>.
- </p>
+ On Windows platforms it is not so simple as there is no type that compiles
+ the thread attributes. There is a linked to the creation of a thread on
+ Windows that is emulated via the thread::attributes class. This is the
+ LPSECURITY_ATTRIBUTES lpThreadAttributes. Boost.Thread provides a non portable
+ set_security function so that the user can provide it before the thread
+ creation as follows
+ </p>
+<pre class="programlisting"><span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_THREAD_PLATFORM_WIN32</span><span class="special">)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span> <span class="identifier">attrs</span><span class="special">;</span>
+ <span class="comment">// set portable attributes</span>
+ <span class="identifier">attr</span><span class="special">.</span><span class="identifier">set_stack_size</span><span class="special">(</span><span class="number">4096</span><span class="special">*</span><span class="number">10</span><span class="special">);</span>
+ <span class="comment">// set non portable attribute</span>
+ <span class="identifier">LPSECURITY_ATTRIBUTES</span> <span class="identifier">sec</span><span class="special">;</span>
+ <span class="comment">// init sec </span>
+ <span class="identifier">attr</span><span class="special">.</span><span class="identifier">set_security</span><span class="special">(</span><span class="identifier">sec</span><span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">th</span><span class="special">(</span><span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">find_the_question</span><span class="special">,</span> <span class="number">42</span><span class="special">);</span>
+ <span class="comment">// Set other thread attributes using the native_handle_type.</span>
+ <span class="comment">//...</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor">#error</span> <span class="string">"Platform not supported"</span>
+<span class="preprocessor">#endif</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.tutorial.exceptions"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.exceptions" title="Exceptions in thread functions">Exceptions
+ in thread functions</a>
+</h4></div></div></div>
<p>
- In order to wait for a thread of execution to finish, the <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a>
- or <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join()"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a>
- member functions of the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object must be used. <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a>
- will block the calling thread until the thread represented by the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object has completed. If the thread of execution represented by the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object has already completed, or the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object represents <span class="emphasis"><em>Not-a-Thread</em></span>, then <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a>
- returns immediately. <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join()"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a>
- is similar, except that a call to <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join()"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a>
- will also return if the thread being waited for does not complete when the
- specified time has elapsed.
- </p>
-<h4>
-<a name="thread.thread_management.h4"></a>
- <span><a name="thread.thread_management.interruption"></a></span><a class="link" href="thread_management.html#thread.thread_management.interruption">Interruption</a>
- </h4>
+ If the function or callable object passed to the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> constructor propagates
+ an exception when invoked that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>,
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>
+ is called.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.tutorial.join"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.join" title="Joining and detaching">Joining and
+ detaching</a>
+</h4></div></div></div>
<p>
- A running thread can be <span class="emphasis"><em>interrupted</em></span> by invoking the <a class="link" href="thread_management.html#thread.thread_management.thread.interrupt" title="Member function interrupt()"><code class="computeroutput"><span class="identifier">interrupt</span><span class="special">()</span></code></a> member function of the corresponding
- <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- object. When the interrupted thread next executes one of the specified <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption points</em></span></a>
- (or if it is currently <span class="emphasis"><em>blocked</em></span> whilst executing one) with
- interruption enabled, then a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>
- exception will be thrown in the interrupted thread. If not caught, this will
- cause the execution of the interrupted thread to terminate. As with any other
- exception, the stack will be unwound, and destructors for objects of automatic
- storage duration will be executed.
- </p>
+ When the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object that represents
+ a thread of execution is destroyed the thread becomes <span class="emphasis"><em>detached</em></span>.
+ Once a thread is detached, it will continue executing until the invocation
+ of the function or callable object supplied on construction has completed,
+ or the program is terminated. A thread can also be detached by explicitly
+ invoking the <a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()"><code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a>
+ member function on the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object. In this case, the
+ <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
+ object ceases to represent the now-detached thread, and instead represents
+ <span class="emphasis"><em>Not-a-Thread</em></span>.
+ </p>
<p>
- If a thread wishes to avoid being interrupted, it can create an instance of
- <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>.
- Objects of this class disable interruption for the thread that created them
- on construction, and restore the interruption state to whatever it was before
- on destruction:
- </p>
+ In order to wait for a thread of execution to finish, the <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a>
+ or <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join()"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a>
+ member functions of the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object must be used. <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a> will block the calling thread
+ until the thread represented by the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object has completed. If
+ the thread of execution represented by the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object has already completed,
+ or the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
+ object represents <span class="emphasis"><em>Not-a-Thread</em></span>, then <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a>
+ returns immediately. <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join()"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a>
+ is similar, except that a call to <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join()"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a>
+ will also return if the thread being waited for does not complete when
+ the specified time has elapsed.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.tutorial.interruption"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.interruption" title="Interruption">Interruption</a>
+</h4></div></div></div>
+<p>
+ A running thread can be <span class="emphasis"><em>interrupted</em></span> by invoking the
+ <a class="link" href="thread_management.html#thread.thread_management.thread.interrupt" title="Member function interrupt()"><code class="computeroutput"><span class="identifier">interrupt</span><span class="special">()</span></code></a>
+ member function of the corresponding <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object. When the interrupted
+ thread next executes one of the specified <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption
+ points</em></span></a> (or if it is currently <span class="emphasis"><em>blocked</em></span>
+ whilst executing one) with interruption enabled, then a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>
+ exception will be thrown in the interrupted thread. If not caught, this
+ will cause the execution of the interrupted thread to terminate. As with
+ any other exception, the stack will be unwound, and destructors for objects
+ of automatic storage duration will be executed.
+ </p>
+<p>
+ If a thread wishes to avoid being interrupted, it can create an instance
+ of <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>. Objects
+ of this class disable interruption for the thread that created them on
+ construction, and restore the interruption state to whatever it was before
+ on destruction:
+ </p>
<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span>
<span class="special">{</span>
<span class="comment">// interruption enabled here</span>
@@ -200,14 +341,14 @@
<span class="special">}</span>
</pre>
<p>
- The effects of an instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>
- can be temporarily reversed by constructing an instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code></a>,
- passing in the <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>
- object in question. This will restore the interruption state to what it was
- when the <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>
- object was constructed, and then disable interruption again when the <a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code></a>
- object is destroyed.
- </p>
+ The effects of an instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a> can be temporarily
+ reversed by constructing an instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code></a>, passing
+ in the <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a> object in
+ question. This will restore the interruption state to what it was when
+ the <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a> object was
+ constructed, and then disable interruption again when the <a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code></a> object is
+ destroyed.
+ </p>
<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span>
<span class="special">{</span>
<span class="comment">// interruption enabled here</span>
@@ -223,139 +364,181 @@
<span class="special">}</span>
</pre>
<p>
- At any point, the interruption state for the current thread can be queried
- by calling <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>.
- </p>
-<a name="interruption_points"></a><h4>
-<a name="thread.thread_management.h5"></a>
- <span><a name="thread.thread_management.predefined_interruption_points"></a></span><a class="link" href="thread_management.html#thread.thread_management.predefined_interruption_points">Predefined
- Interruption Points</a>
- </h4>
+ At any point, the interruption state for the current thread can be queried
+ by calling <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>.
+ </p>
+<a name="interruption_points"></a><h6>
+<a name="thread.thread_management.tutorial.interruption.h0"></a>
+ <span><a name="thread.thread_management.tutorial.interruption.predefined_interruption_points"></a></span><a class="link" href="thread_management.html#thread.thread_management.tutorial.interruption.predefined_interruption_points">Predefined
+ Interruption Points</a>
+ </h6>
<p>
- The following functions are <span class="emphasis"><em>interruption points</em></span>, which
- will throw <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if interruption is enabled
- for the current thread, and interruption is requested for the current thread:
- </p>
+ The following functions are <span class="emphasis"><em>interruption points</em></span>, which
+ will throw <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if interruption is
+ enabled for the current thread, and interruption is requested for the current
+ thread:
+ </p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
- <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">join</span><span class="special">()</span></code></a>
- </li>
+ <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">join</span><span class="special">()</span></code></a>
+ </li>
+<li class="listitem">
+ <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">timed_join</span><span class="special">()</span></code></a>
+ </li>
<li class="listitem">
- <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">timed_join</span><span class="special">()</span></code></a>
- </li>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.thread.try_join_for" title="Member function try_join_for() EXTENSION"><code class="computeroutput"><span class="identifier">try_join_for</span></code></a><span class="special">()</span></code>,
+ </li>
<li class="listitem">
- <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.wait" title="void wait(boost::unique_lock&lt;boost::mutex&gt;&amp; lock)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span><span class="special">::</span><span class="identifier">wait</span><span class="special">()</span></code></a>
- </li>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.thread.try_join_until" title="Member function try_join_until() EXTENSION"><code class="computeroutput"><span class="identifier">try_join_until</span></code></a><span class="special">()</span></code>,
+ </li>
<li class="listitem">
- <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.timed_wait" title="bool timed_wait(boost::unique_lock&lt;boost::mutex&gt;&amp; lock,boost::system_time const&amp; abs_time)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span><span class="special">::</span><span class="identifier">timed_wait</span><span class="special">()</span></code></a>
- </li>
+ <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.wait" title="void wait(boost::unique_lock&lt;boost::mutex&gt;&amp; lock)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span><span class="special">::</span><span class="identifier">wait</span><span class="special">()</span></code></a>
+ </li>
<li class="listitem">
- <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.wait" title="template&lt;typename lock_type&gt; void wait(lock_type&amp; lock)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span><span class="special">::</span><span class="identifier">wait</span><span class="special">()</span></code></a>
- </li>
+ <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.timed_wait" title="bool timed_wait(boost::unique_lock&lt;boost::mutex&gt;&amp; lock,boost::system_time const&amp; abs_time)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span><span class="special">::</span><span class="identifier">timed_wait</span><span class="special">()</span></code></a>
+ </li>
<li class="listitem">
- <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.timed_wait" title="template&lt;typename lock_type&gt; bool timed_wait(lock_type&amp; lock,boost::system_time const&amp; abs_time)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span><span class="special">::</span><span class="identifier">timed_wait</span><span class="special">()</span></code></a>
- </li>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable" title="Class condition_variable"><code class="computeroutput"><span class="identifier">condition_variable</span></code></a><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.wait_for" title="template &lt;class Rep, class Period&gt; cv_status wait_for(boost::unique_lock&lt;boost::mutex&gt;&amp; lock, const chrono::duration&lt;Rep, Period&gt;&amp; rel_time)"><code class="computeroutput"><span class="identifier">wait_for</span></code></a><span class="special">()</span></code>
+ </li>
<li class="listitem">
- <a class="link" href="thread_management.html#thread.thread_management.thread.sleep" title="Static member function sleep()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">sleep</span><span class="special">()</span></code></a>
- </li>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable" title="Class condition_variable"><code class="computeroutput"><span class="identifier">condition_variable</span></code></a><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.wait_until" title="template &lt;class Clock, class Duration&gt; cv_status wait_until(boost::unique_lock&lt;boost::mutex&gt;&amp; lock, const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time)"><code class="computeroutput"><span class="identifier">wait_until</span></code></a><span class="special">()</span></code>
+ </li>
<li class="listitem">
- <a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep" title="Non-member function sleep()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">sleep</span><span class="special">()</span></code></a>
- </li>
+ <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.wait" title="template&lt;typename lock_type&gt; void wait(lock_type&amp; lock)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span><span class="special">::</span><span class="identifier">wait</span><span class="special">()</span></code></a>
+ </li>
<li class="listitem">
- <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_point" title="Non-member function interruption_point()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_point</span><span class="special">()</span></code></a>
- </li>
+ <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.timed_wait" title="template&lt;typename lock_type&gt; bool timed_wait(lock_type&amp; lock,boost::system_time const&amp; abs_time)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span><span class="special">::</span><span class="identifier">timed_wait</span><span class="special">()</span></code></a>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any" title="Class condition_variable_any"><code class="computeroutput"><span class="identifier">condition_variable_any</span></code></a><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.wait_for" title="template &lt;class lock_type, class Rep, class Period&gt; cv_status wait_for(lock_type&amp; lock, const chrono::duration&lt;Rep, Period&gt;&amp; rel_time)"><code class="computeroutput"><span class="identifier">wait_for</span></code></a><span class="special">()</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any" title="Class condition_variable_any"><code class="computeroutput"><span class="identifier">condition_variable_any</span></code></a><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.wait_until" title="template &lt;class lock_type, class Clock, class Duration&gt; cv_status wait_until(lock_type&amp; lock, const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time)"><code class="computeroutput"><span class="identifier">wait_until</span></code></a><span class="special">()</span></code>
+ </li>
+<li class="listitem">
+ <a class="link" href="thread_management.html#thread.thread_management.thread.sleep" title="Static member function sleep()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">sleep</span><span class="special">()</span></code></a>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()"><code class="computeroutput"><span class="identifier">sleep_for</span></code></a><span class="special">()</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()"><code class="computeroutput"><span class="identifier">sleep_until</span></code></a><span class="special">()</span></code>
+ </li>
+<li class="listitem">
+ <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_point" title="Non-member function interruption_point() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_point</span><span class="special">()</span></code></a>
+ </li>
</ul></div>
-<h4>
-<a name="thread.thread_management.h6"></a>
- <span><a name="thread.thread_management.thread_ids"></a></span><a class="link" href="thread_management.html#thread.thread_management.thread_ids">Thread
- IDs</a>
- </h4>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.tutorial.id"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.id" title="Thread IDs">Thread IDs</a>
+</h4></div></div></div>
<p>
- Objects of class <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a>
- can be used to identify threads. Each running thread of execution has a unique
- ID obtainable from the corresponding <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- by calling the <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code>
- member function, or by calling <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code> from within the thread. Objects of class
- <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a>
- can be copied, and used as keys in associative containers: the full range of
- comparison operators is provided. Thread IDs can also be written to an output
- stream using the stream insertion operator, though the output format is unspecified.
- </p>
+ Objects of class <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> can be used to identify threads.
+ Each running thread of execution has a unique ID obtainable from the corresponding
+ <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
+ by calling the <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code>
+ member function, or by calling <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code> from within the thread. Objects of class
+ <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a>
+ can be copied, and used as keys in associative containers: the full range
+ of comparison operators is provided. Thread IDs can also be written to
+ an output stream using the stream insertion operator, though the output
+ format is unspecified.
+ </p>
<p>
- Each instance of <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a>
- either refers to some thread, or <span class="emphasis"><em>Not-a-Thread</em></span>. Instances
- that refer to <span class="emphasis"><em>Not-a-Thread</em></span> compare equal to each other,
- but not equal to any instances that refer to an actual thread of execution.
- The comparison operators on <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a>
- yield a total order for every non-equal thread ID.
- </p>
-<h4>
-<a name="thread.thread_management.h7"></a>
- <span><a name="thread.thread_management.using_native_interfaces_with_boost_thread_resources"></a></span><a class="link" href="thread_management.html#thread.thread_management.using_native_interfaces_with_boost_thread_resources">Using
- native interfaces with Boost.Thread resources</a>
- </h4>
+ Each instance of <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> either refers to some thread,
+ or <span class="emphasis"><em>Not-a-Thread</em></span>. Instances that refer to <span class="emphasis"><em>Not-a-Thread</em></span>
+ compare equal to each other, but not equal to any instances that refer
+ to an actual thread of execution. The comparison operators on <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> yield a total order for every
+ non-equal thread ID.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.tutorial.native_in"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.native_in" title="Using native interfaces with Boost.Thread resources">Using
+ native interfaces with Boost.Thread resources</a>
+</h4></div></div></div>
<p>
- <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- class has members <code class="computeroutput"><span class="identifier">native_handle_type</span></code>
- and <code class="computeroutput"><span class="identifier">native_handle</span></code> providing
- access to the underlying native handle.
- </p>
+ <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
+ class has members <code class="computeroutput"><span class="identifier">native_handle_type</span></code>
+ and <code class="computeroutput"><span class="identifier">native_handle</span></code> providing
+ access to the underlying native handle.
+ </p>
<p>
- This native handle can be used to change for example the scheduling.
- </p>
+ This native handle can be used to change for example the scheduling.
+ </p>
<p>
- In general, it is not safe to use this handle with operations that can conflict
- with the ones provided by Boost.Thread. An example of bad usage could be detaching
- a thread directly as it will not change the internals of the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- instance, so for example the joinable function will continue to return true,
- while the native thread is no more joinable.
- </p>
+ In general, it is not safe to use this handle with operations that can
+ conflict with the ones provided by Boost.Thread. An example of bad usage
+ could be detaching a thread directly as it will not change the internals
+ of the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
+ instance, so for example the joinable function will continue to return
+ true, while the native thread is no more joinable.
+ </p>
<pre class="programlisting"><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">(</span><span class="identifier">fct</span><span class="special">);</span>
<span class="identifier">thread</span><span class="special">::</span><span class="identifier">native_handle_type</span> <span class="identifier">hnd</span><span class="special">=</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">native_handle</span><span class="special">();</span>
<span class="identifier">pthread_detach</span><span class="special">(</span><span class="identifier">hnd</span><span class="special">);</span>
<span class="identifier">assert</span><span class="special">(</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">joinable</span><span class="special">());</span>
</pre>
-<h4>
-<a name="thread.thread_management.h8"></a>
- <span><a name="thread.thread_management.using_boost_thread_interfaces_in_a_native_thread"></a></span><a class="link" href="thread_management.html#thread.thread_management.using_boost_thread_interfaces_in_a_native_thread">Using
- Boost.Thread interfaces in a native thread</a>
- </h4>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.tutorial.native_from"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.native_from" title="Using Boost.Thread interfaces in a native thread">Using
+ Boost.Thread interfaces in a native thread</a>
+</h4></div></div></div>
<p>
- Any thread of execution created using the native interface is called a native
- thread in this documentation.
- </p>
+ Any thread of execution created using the native interface is called a
+ native thread in this documentation.
+ </p>
<p>
- The first example of a native thread of execution is the main thread.
- </p>
+ The first example of a native thread of execution is the main thread.
+ </p>
<p>
- The user can access to some synchronization functions related to the native
- current thread using the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span></code>
- <code class="computeroutput"><span class="identifier">yield</span></code>, <code class="computeroutput"><span class="identifier">sleep</span></code>,
- functions.
- </p>
+ The user can access to some synchronization functions related to the native
+ current thread using the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span></code>
+ <code class="computeroutput"><span class="identifier">yield</span></code>, <code class="computeroutput"><span class="identifier">sleep</span></code>,
+ <a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()"><code class="computeroutput"><span class="identifier">sleep_for</span></code></a>, <a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()"><code class="computeroutput"><span class="identifier">sleep_until</span></code></a>, functions.
+ </p>
<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
<span class="comment">// ... </span>
- <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">sleep</span><span class="special">();</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">sleep_for</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">milliseconds</span><span class="special">(</span><span class="number">10</span><span class="special">));</span>
<span class="comment">// ... </span>
<span class="special">}</span>
</pre>
<p>
- Of course all the synchronization facilities provided by Boost.Thread are also
- available on native threads.
- </p>
+ Of course all the synchronization facilities provided by Boost.Thread are
+ also available on native threads.
+ </p>
+<p>
+ The <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span></code> interrupt related functions
+ behave in a degraded mode when called from a thread created using the native
+ interface, i.e. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code>
+ returns false. As consequence the use of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code>
+ and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code> will do nothing
+ and calls to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interrupt_point</span><span class="special">()</span></code>
+ will be just ignored.
+ </p>
+<p>
+ As the single way to interrupt a thread is through a <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> instance, <code class="computeroutput"><span class="identifier">interruption_request</span><span class="special">()</span></code>
+ wiil returns false for the native threads.
+ </p>
+<h6>
+<a name="thread.thread_management.tutorial.native_from.h0"></a>
+ <span><a name="thread.thread_management.tutorial.native_from._code__phrase_role__identifier__pthread_exit__phrase___code__posix_limitation"></a></span><a class="link" href="thread_management.html#thread.thread_management.tutorial.native_from._code__phrase_role__identifier__pthread_exit__phrase___code__posix_limitation"><code class="computeroutput"><span class="identifier">pthread_exit</span></code> POSIX limitation</a>
+ </h6>
<p>
- The <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span></code> interrupt related functions behave
- in a degraded mode when called from a thread created using the native interface,
- i.e. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code>
- returns false. As consequence the use of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code>
- and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code> will do nothing and
- calls to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interrupt_point</span><span class="special">()</span></code>
- will be just ignored.
- </p>
+ <code class="computeroutput"><span class="identifier">pthread_exit</span></code> in glibc/NPTL
+ causes a "forced unwind" that is almost like a C++ exception,
+ but not quite. On Mac OS X, for example, <code class="computeroutput"><span class="identifier">pthread_exit</span></code>
+ unwinds without calling C++ destructors.
+ </p>
<p>
- As the single way to interrupt a thread is through a <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
- instance, <code class="computeroutput"><span class="identifier">interruption_request</span><span class="special">()</span></code> wiil returns false for the native threads.
- </p>
+ This behavior is incompatible with the current Boost.Thread design, so
+ the use of this function in a POSIX thread result in undefined behavior
+ of any Boost.Thread function.
+ </p>
+</div>
+</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="thread.thread_management.thread"></a><a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread">Class <code class="computeroutput"><span class="identifier">thread</span></code></a>
@@ -369,6 +552,12 @@
assignment operator</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.callable_constructor">Thread
Constructor</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attr_callable_constructor">Thread
+ Attributes Constructor EXTENSION</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.callable_move_constructor">Thread
+ Callable Move Constructor</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attr_callable_move_constructor">Thread
+ Attributes Move Constructor EXTENSION</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.multiple_argument_constructor">Thread
Constructor with arguments</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.destructor">Thread
@@ -379,6 +568,12 @@
<code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.timed_join">Member
function <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.try_join_for">Member
+ function <code class="computeroutput"><span class="identifier">try_join_for</span><span class="special">()</span></code>
+ EXTENSION</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.try_join_until">Member
+ function <code class="computeroutput"><span class="identifier">try_join_until</span><span class="special">()</span></code>
+ EXTENSION</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.detach">Member function
<code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.get_id">Member function
@@ -389,8 +584,10 @@
member function <code class="computeroutput"><span class="identifier">hardware_concurrency</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.nativehandle">Member
function <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code></a></span></dt>
-<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.equals"><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code></a></span></dt>
-<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.not_equals"><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code></a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.equals"><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code>
+ DEPRECATED V3</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.not_equals"><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code>
+ DEPRECATED V3</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.sleep">Static member
function <code class="computeroutput"><span class="identifier">sleep</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.yield">Static member
@@ -399,72 +596,93 @@
<code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.non_member_swap">Non-member
function <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a></span></dt>
-<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.non_member_move">Non-member
- function <code class="computeroutput"><span class="identifier">move</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id">Class <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes">Class
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span></code> EXTENSION</a></span></dt>
</dl></div>
<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">thread</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
- <span class="identifier">thread</span><span class="special">();</span>
+ <span class="identifier">thread</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="identifier">thread</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
+ <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
+
+ <span class="identifier">thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;&amp;)</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">thread</span><span class="special">&amp;&amp;)</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="special">~</span><span class="identifier">thread</span><span class="special">();</span>
<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
<span class="keyword">explicit</span> <span class="identifier">thread</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">thread</span><span class="special">(</span><span class="identifier">F</span> <span class="special">&amp;&amp;</span><span class="identifier">f</span><span class="special">);</span>
<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">A2</span><span class="special">,...&gt;</span>
<span class="identifier">thread</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">,</span><span class="identifier">A1</span> <span class="identifier">a1</span><span class="special">,</span><span class="identifier">A2</span> <span class="identifier">a2</span><span class="special">,...);</span>
+ <span class="comment">// template &lt;class F, class ...Args&gt; </span>
+ <span class="comment">// explicit thread(F&amp;&amp; f, Args&amp;&amp;... args); // NOT YET IMPLEMENTED</span>
<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
- <span class="identifier">thread</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">&gt;</span> <span class="identifier">f</span><span class="special">);</span>
+ <span class="keyword">explicit</span> <span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&amp;</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&amp;</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">F</span> <span class="special">&amp;&amp;</span><span class="identifier">f</span><span class="special">);</span> <span class="comment">// EXTENSION</span>
+ <span class="comment">// template &lt;class F, class ...Args&gt; </span>
+ <span class="comment">// explicit thread(attributes&amp; attrs, F&amp;&amp; f, Args&amp;&amp;... args); // NOT YET IMPLEMENTED</span>
<span class="comment">// move support</span>
- <span class="identifier">thread</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">x</span><span class="special">);</span>
- <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">x</span><span class="special">);</span>
- <span class="keyword">operator</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;();</span>
- <span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">move</span><span class="special">();</span>
+ <span class="identifier">thread</span><span class="special">(</span><span class="identifier">thread</span> <span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">thread</span> <span class="special">&amp;&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
- <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="keyword">class</span> <span class="identifier">id</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="special">;</span>
+ <span class="keyword">class</span> <span class="identifier">attributes</span><span class="special">;</span>
- <span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
- <span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
- <span class="keyword">bool</span> <span class="identifier">timed_join</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">wait_until</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="identifier">noexcept</span><span class="special">;</span>
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
- <span class="keyword">bool</span> <span class="identifier">timed_join</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">()</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">try_join_for</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">try_join_until</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">t</span><span class="special">);</span> <span class="comment">// EXTENSION</span>
<span class="keyword">void</span> <span class="identifier">detach</span><span class="special">();</span>
- <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">hardware_concurrency</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">hardware_concurrency</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span>
<span class="identifier">native_handle_type</span> <span class="identifier">native_handle</span><span class="special">();</span>
- <span class="keyword">void</span> <span class="identifier">interrupt</span><span class="special">();</span>
- <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">interrupt</span><span class="special">();</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+
+
+<span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0</span> <span class="special">||</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_DONT_USE_CHRONO</span>
+ <span class="keyword">bool</span> <span class="identifier">timed_join</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">wait_until</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">timed_join</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+<span class="preprocessor">#endif</span>
- <span class="comment">// backwards compatibility</span>
+<span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0</span>
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">();</span>
<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">xt</span><span class="special">);</span>
+<span class="preprocessor">#endif</span>
+
<span class="special">};</span>
-<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">lhs</span><span class="special">,</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
-<span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">move</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">lhs</span><span class="special">,</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="thread.thread_management.thread.default_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.default_constructor" title="Default Constructor">Default
Constructor</a>
</h4></div></div></div>
-<pre class="programlisting"><span class="identifier">thread</span><span class="special">();</span>
+<pre class="programlisting"><span class="identifier">thread</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -474,6 +692,10 @@
Constructs a <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> instance that refers
to <span class="emphasis"><em>Not-a-Thread</em></span>.
</p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>
+ </p></dd>
<dt><span class="term">Throws:</span></dt>
<dd><p>
Nothing
@@ -486,7 +708,7 @@
<a name="thread.thread_management.thread.move_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.move_constructor" title="Move Constructor">Move
Constructor</a>
</h4></div></div></div>
-<pre class="programlisting"><span class="identifier">thread</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">);</span>
+<pre class="programlisting"><span class="identifier">thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -498,7 +720,9 @@
</p></dd>
<dt><span class="term">Postconditions:</span></dt>
<dd><p>
- <code class="computeroutput"><span class="identifier">other</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>
+ <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">thread</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> prior to the construction
</p></dd>
<dt><span class="term">Throws:</span></dt>
<dd><p>
@@ -512,7 +736,7 @@
<a name="thread.thread_management.thread.move_assignment"></a><a class="link" href="thread_management.html#thread.thread_management.thread.move_assignment" title="Move assignment operator">Move
assignment operator</a>
</h4></div></div></div>
-<pre class="programlisting"><span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">);</span>
+<pre class="programlisting"><span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">thread</span><span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -521,11 +745,15 @@
<dd><p>
Transfers ownership of the thread managed by <code class="computeroutput"><span class="identifier">other</span></code>
(if any) to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
- If there was a thread previously associated with <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> then that thread is detached.
+ Version 1: If there was a thread previously associated with <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ then that thread is detached, version 2: If the thread is joinable
+ calls to std::terminate.
</p></dd>
<dt><span class="term">Postconditions:</span></dt>
<dd><p>
<code class="computeroutput"><span class="identifier">other</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">thread</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> prior to the assignment.
</p></dd>
<dt><span class="term">Throws:</span></dt>
<dd><p>
@@ -545,6 +773,52 @@
<div class="variablelist">
<p class="title"><b></b></p>
<dl>
+<dt><span class="term">Requires:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Callable</span></code> must by
+ Copyable and <code class="computeroutput"><span class="identifier">func</span><span class="special">()</span></code> must be a valid expression.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">func</span></code> is copied into
+ storage managed internally by the thread library, and that copy is
+ invoked on a newly-created thread of execution. If this invocation
+ results in an exception being propagated into the internals of the
+ thread library that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>,
+ then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>
+ will be called. Any return value from this invocation is ignored.
+ </p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to the newly created thread of execution and <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error
+ occurs.
+ </p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_unavailable_try_again</strong></span> :
+ the system lacked the necessary resources to create an- other thread,
+ or the system-imposed limit on the number of threads in a process
+ would be exceeded.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.thread.attr_callable_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attr_callable_constructor" title="Thread Attributes Constructor EXTENSION">Thread
+ Attributes Constructor EXTENSION</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">&gt;</span>
+<span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&amp;</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
<dt><span class="term">Preconditions:</span></dt>
<dd><p>
<code class="computeroutput"><span class="identifier">Callable</span></code> must by
@@ -554,22 +828,123 @@
<dd><p>
<code class="computeroutput"><span class="identifier">func</span></code> is copied into
storage managed internally by the thread library, and that copy is
+ invoked on a newly-created thread of execution with the specified
+ attributes. If this invocation results in an exception being propagated
+ into the internals of the thread library that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>, then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>
+ will be called. Any return value from this invocation is ignored.
+ If the attributes declare the native thread as detached, the boost::thread
+ will be detached.
+ </p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to the newly created thread of execution and <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error
+ occurs.
+ </p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_unavailable_try_again</strong></span> :
+ the system lacked the necessary resources to create an- other thread,
+ or the system-imposed limit on the number of threads in a process
+ would be exceeded.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.thread.callable_move_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.callable_move_constructor" title="Thread Callable Move Constructor">Thread
+ Callable Move Constructor</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">&gt;</span>
+<span class="identifier">thread</span><span class="special">(</span><span class="identifier">Callable</span> <span class="special">&amp;&amp;</span><span class="identifier">func</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Preconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Callable</span></code> must by
+ Movable.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">func</span></code> is moved into
+ storage managed internally by the thread library, and that copy is
invoked on a newly-created thread of execution. If this invocation
results in an exception being propagated into the internals of the
thread library that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>,
then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>
- will be called.
+ will be called. Any return value from this invocation is ignored.
</p></dd>
<dt><span class="term">Postconditions:</span></dt>
<dd><p>
<code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
- refers to the newly created thread of execution.
+ refers to the newly created thread of execution and <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>.
</p></dd>
<dt><span class="term">Throws:</span></dt>
<dd><p>
<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error
occurs.
</p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_unavailable_try_again</strong></span> :
+ the system lacked the necessary resources to create an- other thread,
+ or the system-imposed limit on the number of threads in a process
+ would be exceeded.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.thread.attr_callable_move_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attr_callable_move_constructor" title="Thread Attributes Move Constructor EXTENSION">Thread
+ Attributes Move Constructor EXTENSION</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">&gt;</span>
+<span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&amp;</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Preconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Callable</span></code> must by
+ copyable.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">func</span></code> is copied into
+ storage managed internally by the thread library, and that copy is
+ invoked on a newly-created thread of execution with the specified
+ attributes. If this invocation results in an exception being propagated
+ into the internals of the thread library that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>, then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>
+ will be called. Any return value from this invocation is ignored.
+ If the attributes declare the native thread as detached, the boost::thread
+ will be detached.
+ </p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to the newly created thread of execution and <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error
+ occurs.
+ </p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_unavailable_try_again</strong></span> :
+ the system lacked the necessary resources to create an- other thread,
+ or the system-imposed limit on the number of threads in a process
+ would be exceeded.
+ </p></dd>
</dl>
</div>
</div>
@@ -605,6 +980,13 @@
<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error
occurs.
</p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_unavailable_try_again</strong></span> :
+ the system lacked the necessary resources to create an- other thread,
+ or the system-imposed limit on the number of threads in a process
+ would be exceeded.
+ </p></dd>
<dt><span class="term">Note:</span></dt>
<dd><p>
Currently up to nine additional arguments <code class="computeroutput"><span class="identifier">a1</span></code>
@@ -626,9 +1008,10 @@
<dl>
<dt><span class="term">Effects:</span></dt>
<dd><p>
- If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
- has an associated thread of execution, calls <a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()"><code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a>.
- Destroys <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
+ Version 1: If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ has an associated thread of execution, calls <a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()"><code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a>,
+ Version 2: If the thread is joinable calls to std::terminate. Destroys
+ <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
</p></dd>
<dt><span class="term">Throws:</span></dt>
<dd><p>
@@ -642,7 +1025,7 @@
<a name="thread.thread_management.thread.joinable"></a><a class="link" href="thread_management.html#thread.thread_management.thread.joinable" title="Member function joinable()">Member function
<code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code></a>
</h4></div></div></div>
-<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">()</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -672,7 +1055,7 @@
<dl>
<dt><span class="term">Preconditions:</span></dt>
<dd><p>
- <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code>
+ the thread is joinable.
</p></dd>
<dt><span class="term">Effects:</span></dt>
<dd><p>
@@ -690,7 +1073,12 @@
<dt><span class="term">Throws:</span></dt>
<dd><p>
<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current
- thread of execution is interrupted.
+ thread of execution is interrupted or <code class="computeroutput"><span class="identifier">system_error</span></code>
+ </p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if
+ deadlock is detected or this-&gt;get_id() == std::this_thread::get_id().
</p></dd>
<dt><span class="term">Notes:</span></dt>
<dd><p>
@@ -747,7 +1135,12 @@
<dt><span class="term">Throws:</span></dt>
<dd><p>
<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current
- thread of execution is interrupted.
+ thread of execution is interrupted or <code class="computeroutput"><span class="identifier">system_error</span></code>
+ </p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if
+ deadlock is detected or this-&gt;get_id() == std::this_thread::get_id().
</p></dd>
<dt><span class="term">Notes:</span></dt>
<dd><p>
@@ -760,19 +1153,143 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.thread.try_join_for"></a><a class="link" href="thread_management.html#thread.thread_management.thread.try_join_for" title="Member function try_join_for() EXTENSION">Member
+ function <code class="computeroutput"><span class="identifier">try_join_for</span><span class="special">()</span></code>
+ EXTENSION</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">try_join_for</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Preconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code>
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to a thread of execution, waits for that thread of execution
+ to complete, the specified duration <code class="computeroutput"><span class="identifier">rel_time</span></code>
+ has elapsed. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ doesn't refer to a thread of execution, returns immediately.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to a thread of execution on entry, and that thread of execution
+ has completed before the call times out, <code class="computeroutput"><span class="keyword">false</span></code>
+ otherwise.
+ </p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to a thread of execution on entry, and <code class="computeroutput"><span class="identifier">try_join_for</span></code>
+ returns <code class="computeroutput"><span class="keyword">true</span></code>, that thread
+ of execution has completed, and <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> no longer refers to any thread
+ of execution. If this call to <code class="computeroutput"><span class="identifier">try_join_for</span></code>
+ returns <code class="computeroutput"><span class="keyword">false</span></code>, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ is unchanged.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current
+ thread of execution is interrupted or <code class="computeroutput"><span class="identifier">system_error</span></code>
+ </p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if
+ deadlock is detected or this-&gt;get_id() == std::this_thread::get_id().
+ </p></dd>
+<dt><span class="term">Notes:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">try_join_for</span><span class="special">()</span></code>
+ is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption
+ points</em></span></a>.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.thread.try_join_until"></a><a class="link" href="thread_management.html#thread.thread_management.thread.try_join_until" title="Member function try_join_until() EXTENSION">Member
+ function <code class="computeroutput"><span class="identifier">try_join_until</span><span class="special">()</span></code>
+ EXTENSION</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">try_join_until</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Preconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code>
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to a thread of execution, waits for that thread of execution
+ to complete, the time <code class="computeroutput"><span class="identifier">abs_time</span></code>
+ has been reach. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> doesn't refer to a thread of
+ execution, returns immediately.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to a thread of execution on entry, and that thread of execution
+ has completed before the call times out, <code class="computeroutput"><span class="keyword">false</span></code>
+ otherwise.
+ </p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to a thread of execution on entry, and <code class="computeroutput"><span class="identifier">try_join_until</span></code>
+ returns <code class="computeroutput"><span class="keyword">true</span></code>, that thread
+ of execution has completed, and <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> no longer refers to any thread
+ of execution. If this call to <code class="computeroutput"><span class="identifier">try_join_until</span></code>
+ returns <code class="computeroutput"><span class="keyword">false</span></code>, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ is unchanged.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current
+ thread of execution is interrupted or <code class="computeroutput"><span class="identifier">system_error</span></code>
+ </p></dd>
+<dt><span class="term">Error Conditions:</span></dt>
+<dd><p>
+ <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if
+ deadlock is detected or this-&gt;get_id() == std::this_thread::get_id().
+ </p></dd>
+<dt><span class="term">Notes:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">try_join_until</span><span class="special">()</span></code>
+ is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption
+ points</em></span></a>.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
<a name="thread.thread_management.thread.detach"></a><a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()">Member function
<code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a>
</h4></div></div></div>
-<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">detach</span><span class="special">();</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">detach</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
<dl>
+<dt><span class="term">Preconditions:</span></dt>
+<dd><p>
+ the thread is joinable.
+ </p></dd>
<dt><span class="term">Effects:</span></dt>
<dd><p>
- If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
- refers to a thread of execution, that thread of execution becomes
- detached, and no longer has an associated <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object.
+ The thread of execution becomes detached, and no longer has an associated
+ <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a>
+ object.
</p></dd>
<dt><span class="term">Postconditions:</span></dt>
<dd><p>
@@ -791,7 +1308,7 @@
<a name="thread.thread_management.thread.get_id"></a><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()">Member function
<code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code></a>
</h4></div></div></div>
-<pre class="programlisting"><span class="identifier">thread</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="special">;</span>
+<pre class="programlisting"><span class="identifier">thread</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="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -841,7 +1358,7 @@
<a name="thread.thread_management.thread.hardware_concurrency"></a><a class="link" href="thread_management.html#thread.thread_management.thread.hardware_concurrency" title="Static member function hardware_concurrency()">Static
member function <code class="computeroutput"><span class="identifier">hardware_concurrency</span><span class="special">()</span></code></a>
</h4></div></div></div>
-<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">hardware_concurrency</span><span class="special">();</span>
+<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">hardware_concurrency</span><span class="special">()</span> <span class="identifier">noexecpt</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -886,7 +1403,8 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.thread.equals"></a><a class="link" href="thread_management.html#thread.thread_management.thread.equals" title="operator=="><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code></a>
+<a name="thread.thread_management.thread.equals"></a><a class="link" href="thread_management.html#thread.thread_management.thread.equals" title="operator== DEPRECATED V3"><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code>
+ DEPRECATED V3</a>
</h4></div></div></div>
<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre>
@@ -897,12 +1415,18 @@
<dd><p>
<code class="computeroutput"><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code>
</p></dd>
+<dt><span class="term">See:</span></dt>
+<dd><p>
+ Use <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()"><code class="computeroutput"><span class="identifier">get_id</span></code></a><span class="special">()==</span><span class="identifier">b</span><span class="special">.</span><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()"><code class="computeroutput"><span class="identifier">get_id</span></code></a><span class="special">()</span></code>
+ instead
+ </p></dd>
</dl>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.thread.not_equals"></a><a class="link" href="thread_management.html#thread.thread_management.thread.not_equals" title="operator!="><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code></a>
+<a name="thread.thread_management.thread.not_equals"></a><a class="link" href="thread_management.html#thread.thread_management.thread.not_equals" title="operator!= DEPRECATED V3"><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code>
+ DEPRECATED V3</a>
</h4></div></div></div>
<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre>
@@ -913,6 +1437,11 @@
<dd><p>
<code class="computeroutput"><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code>
</p></dd>
+<dt><span class="term">See:</span></dt>
+<dd><p>
+ Use <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()"><code class="computeroutput"><span class="identifier">get_id</span></code></a><span class="special">()!=</span><span class="identifier">b</span><span class="special">.</span><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()"><code class="computeroutput"><span class="identifier">get_id</span></code></a><span class="special">()</span></code>
+ instead`
+ </p></dd>
</dl>
</div>
</div>
@@ -941,6 +1470,11 @@
is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption
points</em></span></a>.
</p></dd>
+<dt><span class="term">See:</span></dt>
+<dd><p>
+ Use <code class="computeroutput"><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()"><code class="computeroutput"><span class="identifier">sleep_for</span></code></a><span class="special">()</span></code>
+ or <code class="computeroutput"><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()"><code class="computeroutput"><span class="identifier">sleep_until</span></code></a><span class="special">()</span></code>
+ </p></dd>
</dl>
</div>
</div>
@@ -958,6 +1492,10 @@
<dd><p>
See <a class="link" href="thread_management.html#thread.thread_management.this_thread.yield" title="Non-member function yield()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">yield</span><span class="special">()</span></code></a>.
</p></dd>
+<dt><span class="term">See:</span></dt>
+<dd><p>
+ Use <code class="computeroutput"><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.yield" title="Non-member function yield()"><code class="computeroutput"><span class="identifier">yield</span></code></a><span class="special">()</span></code>
+ </p></dd>
</dl>
</div>
</div>
@@ -966,7 +1504,7 @@
<a name="thread.thread_management.thread.swap"></a><a class="link" href="thread_management.html#thread.thread_management.thread.swap" title="Member function swap()">Member function
<code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a>
</h4></div></div></div>
-<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -997,7 +1535,7 @@
</h4></div></div></div>
<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
-<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">lhs</span><span class="special">,</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
+<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">lhs</span><span class="special">,</span><span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1011,32 +1549,6 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.thread.non_member_move"></a><a class="link" href="thread_management.html#thread.thread_management.thread.non_member_move" title="Non-member function move()">Non-member
- function <code class="computeroutput"><span class="identifier">move</span><span class="special">()</span></code></a>
-</h4></div></div></div>
-<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
-
-<span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">move</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="identifier">t</span><span class="special">)</span>
-</pre>
-<div class="variablelist">
-<p class="title"><b></b></p>
-<dl>
-<dt><span class="term">Returns:</span></dt>
-<dd><p>
- <code class="computeroutput"><span class="identifier">t</span></code>.
- </p></dd>
-</dl>
-</div>
-<p>
- Enables moving thread objects. e.g.
- </p>
-<pre class="programlisting"><span class="keyword">extern</span> <span class="keyword">void</span> <span class="identifier">some_func</span><span class="special">();</span>
-<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">(</span><span class="identifier">some_func</span><span class="special">);</span>
-<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t2</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">t</span><span class="special">));</span> <span class="comment">// transfer thread from t to t2</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h4 class="title">
<a name="thread.thread_management.thread.id"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id">Class <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a>
</h4></div></div></div>
<div class="toc"><dl>
@@ -1056,14 +1568,14 @@
<span class="keyword">class</span> <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
- <span class="identifier">id</span><span class="special">();</span>
+ <span class="identifier">id</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
- <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
- <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
- <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
- <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
- <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
- <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">&gt;</span>
<span class="keyword">friend</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;&amp;</span>
@@ -1075,7 +1587,7 @@
<a name="thread.thread_management.thread.id.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.constructor" title="Default constructor">Default
constructor</a>
</h5></div></div></div>
-<pre class="programlisting"><span class="identifier">id</span><span class="special">();</span>
+<pre class="programlisting"><span class="identifier">id</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1096,7 +1608,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.thread.id.is_equal"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.is_equal" title="operator=="><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code></a>
</h5></div></div></div>
-<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1119,7 +1631,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.thread.id.not_equal"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.not_equal" title="operator!="><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code></a>
</h5></div></div></div>
-<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1142,7 +1654,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.thread.id.less_than"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.less_than" title="operator&lt;"><code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;</span></code></a>
</h5></div></div></div>
-<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1171,7 +1683,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.thread.id.greater_than"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.greater_than" title="operator&gt;"><code class="computeroutput"><span class="keyword">operator</span><span class="special">&gt;</span></code></a>
</h5></div></div></div>
-<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1191,7 +1703,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.thread.id.less_than_or_equal"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.less_than_or_equal" title="operator&lt;="><code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;=</span></code></a>
</h5></div></div></div>
-<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1211,7 +1723,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.thread.id.greater_than_or_equal"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.greater_than_or_equal" title="operator&gt;="><code class="computeroutput"><span class="keyword">operator</span><span class="special">&gt;=</span></code></a>
</h5></div></div></div>
-<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1254,6 +1766,139 @@
</div>
</div>
</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.thread.attributes"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes" title="Class boost::thread::attributes EXTENSION">Class
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span></code> EXTENSION</a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes.constructor">Default
+ constructor</a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes.set_stack_size">Member
+ function <code class="computeroutput"><span class="identifier">set_stack_size</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes.get_stack_size">Member
+ function <code class="computeroutput"><span class="identifier">get_stack_size</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes.nativehandle">Member
+ function <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">attributes</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="special">~</span> <span class="identifier">attributes</span><span class="special">()=</span><span class="keyword">default</span><span class="special">;</span>
+ <span class="comment">// stack</span>
+ <span class="keyword">void</span> <span class="identifier">set_stack_size</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">get_stack_size</span><span class="special">()</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+
+<span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_DEFINES_THREAD_ATTRIBUTES_NATIVE_HANDLE</span>
+ <span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span>
+ <span class="identifier">native_handle_type</span><span class="special">*</span> <span class="identifier">native_handle</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">native_handle_type</span><span class="special">*</span> <span class="identifier">native_handle</span><span class="special">()</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+<span class="preprocessor">#endif</span>
+
+<span class="special">};</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="thread.thread_management.thread.attributes.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes.constructor" title="Default constructor">Default
+ constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">thread_attributes</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Constructs a thread atrributes instance with its default values.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="thread.thread_management.thread.attributes.set_stack_size"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes.set_stack_size" title="Member function set_stack_size()">Member
+ function <code class="computeroutput"><span class="identifier">set_stack_size</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">set_stack_size</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Stores the stack size to be used to create a thread. This is an
+ hint that the implementation can choose a better size if to small
+ or too big or not aligned to a page.
+ </p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span>
+ <span class="identifier">get_stack_size</span><span class="special">()</span></code>
+ returns the chosen stack size.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="thread.thread_management.thread.attributes.get_stack_size"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes.get_stack_size" title="Member function get_stack_size()">Member
+ function <code class="computeroutput"><span class="identifier">get_stack_size</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">get_stack_size</span><span class="special">()</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ The stack size to be used on the creation of a thread. Note that
+ this function can return 0 meaning the default.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="thread.thread_management.thread.attributes.nativehandle"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes.nativehandle" title="Member function native_handle()">Member
+ function <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span>
+ <span class="identifier">native_handle_type</span><span class="special">*</span> <span class="identifier">native_handle</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">native_handle_type</span><span class="special">*</span> <span class="identifier">native_handle</span><span class="special">()</span> <span class="keyword">const</span> <span class="identifier">noexcept</span><span class="special">;</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Returns an instance of <code class="computeroutput"><span class="identifier">native_handle_type</span></code>
+ that can be used with platform-specific APIs to manipulate the
+ underlying thread attributes implementation. If no such instance
+ exists, <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">native_handle_type</span></code>
+ are not present and <code class="computeroutput"><span class="identifier">BOOST_THREAD_DEFINES_THREAD_ATTRIBUTES_NATIVE_HANDLE</span></code>
+ is not defined.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
@@ -1263,22 +1908,52 @@
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.get_id">Non-member
function <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.interruption_point">Non-member
- function <code class="computeroutput"><span class="identifier">interruption_point</span><span class="special">()</span></code></a></span></dt>
+ function <code class="computeroutput"><span class="identifier">interruption_point</span><span class="special">()</span></code> EXTENSION</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.interruption_requested">Non-member
- function <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code></a></span></dt>
+ function <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code> EXTENSION</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.interruption_enabled">Non-member
- function <code class="computeroutput"><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a></span></dt>
+ function <code class="computeroutput"><span class="identifier">interruption_enabled</span><span class="special">()</span></code> EXTENSION</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.sleep">Non-member
function <code class="computeroutput"><span class="identifier">sleep</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.sleep_until">Non-member
+ function <code class="computeroutput"><span class="identifier">sleep_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.sleep_for">Non-member
+ function <code class="computeroutput"><span class="identifier">sleep_for</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.yield">Non-member
function <code class="computeroutput"><span class="identifier">yield</span><span class="special">()</span></code></a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.disable_interruption">Class
- <code class="computeroutput"><span class="identifier">disable_interruption</span></code></a></span></dt>
+ <code class="computeroutput"><span class="identifier">disable_interruption</span></code> EXTENSION</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.restore_interruption">Class
- <code class="computeroutput"><span class="identifier">restore_interruption</span></code></a></span></dt>
+ <code class="computeroutput"><span class="identifier">restore_interruption</span></code> EXTENSION</a></span></dt>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.atthreadexit">Non-member
- function template <code class="computeroutput"><span class="identifier">at_thread_exit</span><span class="special">()</span></code></a></span></dt>
+ function template <code class="computeroutput"><span class="identifier">at_thread_exit</span><span class="special">()</span></code> EXTENSION</a></span></dt>
</dl></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">this_thread</span> <span class="special">{</span>
+ <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">at_thread_exit</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span> <span class="comment">// EXTENSION</span>
+
+ <span class="keyword">void</span> <span class="identifier">interruption_point</span><span class="special">();</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_enabled</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">class</span> <span class="identifier">disable_interruption</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+ <span class="keyword">class</span> <span class="identifier">restore_interruption</span><span class="special">;</span> <span class="comment">// EXTENSION</span>
+
+ <span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0</span> <span class="special">||</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_DONT_USE_CHRONO</span>
+ <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">)</span>
+ <span class="preprocessor">#endif</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="thread.thread_management.this_thread.get_id"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.get_id" title="Non-member function get_id()">Non-member
@@ -1288,7 +1963,7 @@
<span class="keyword">namespace</span> <span class="identifier">this_thread</span>
<span class="special">{</span>
- <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">();</span>
+ <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<div class="variablelist">
@@ -1309,8 +1984,8 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.this_thread.interruption_point"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_point" title="Non-member function interruption_point()">Non-member
- function <code class="computeroutput"><span class="identifier">interruption_point</span><span class="special">()</span></code></a>
+<a name="thread.thread_management.this_thread.interruption_point"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_point" title="Non-member function interruption_point() EXTENSION">Non-member
+ function <code class="computeroutput"><span class="identifier">interruption_point</span><span class="special">()</span></code> EXTENSION</a>
</h4></div></div></div>
<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
@@ -1328,8 +2003,8 @@
</p></dd>
<dt><span class="term">Throws:</span></dt>
<dd><p>
- <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
- and <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_requested" title="Non-member function interruption_requested()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_requested</span><span class="special">()</span></code></a>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+ and <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_requested" title="Non-member function interruption_requested() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_requested</span><span class="special">()</span></code></a>
both return <code class="computeroutput"><span class="keyword">true</span></code>.
</p></dd>
</dl>
@@ -1337,14 +2012,14 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.this_thread.interruption_requested"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_requested" title="Non-member function interruption_requested()">Non-member
- function <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code></a>
+<a name="thread.thread_management.this_thread.interruption_requested"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_requested" title="Non-member function interruption_requested() EXTENSION">Non-member
+ function <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code> EXTENSION</a>
</h4></div></div></div>
<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="keyword">namespace</span> <span class="identifier">this_thread</span>
<span class="special">{</span>
- <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<div class="variablelist">
@@ -1365,14 +2040,14 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.this_thread.interruption_enabled"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()">Non-member
- function <code class="computeroutput"><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+<a name="thread.thread_management.this_thread.interruption_enabled"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION">Non-member
+ function <code class="computeroutput"><span class="identifier">interruption_enabled</span><span class="special">()</span></code> EXTENSION</a>
</h4></div></div></div>
<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="keyword">namespace</span> <span class="identifier">this_thread</span>
<span class="special">{</span>
- <span class="keyword">bool</span> <span class="identifier">interruption_enabled</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_enabled</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<div class="variablelist">
@@ -1425,6 +2100,84 @@
is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption
points</em></span></a>.
</p></dd>
+<dt><span class="term">See:</span></dt>
+<dd><p>
+ Use <code class="computeroutput"><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()"><code class="computeroutput"><span class="identifier">sleep_for</span></code></a><span class="special">()</span></code>
+ and <code class="computeroutput"><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()"><code class="computeroutput"><span class="identifier">sleep_until</span></code></a><span class="special">()</span></code>
+ instead.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.this_thread.sleep_until"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()">Non-member
+ function <code class="computeroutput"><span class="identifier">sleep_until</span><span class="special">()</span></code></a>
+</h4></div></div></div>
+<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">namespace</span> <span class="identifier">this_thread</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Suspends the current thread until the time period specified by <code class="computeroutput"><span class="identifier">rel_time</span></code> has elapsed or the time
+ point specified by <code class="computeroutput"><span class="identifier">abs_time</span></code>
+ has been reached.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing if Clock satisfies the TrivialClock requirements and operations
+ of Duration do not throw exceptions. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>
+ if the current thread of execution is interrupted.
+ </p></dd>
+<dt><span class="term">Notes:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">sleep_until</span><span class="special">()</span></code>
+ is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption
+ points</em></span></a>.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="thread.thread_management.this_thread.sleep_for"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()">Non-member
+ function <code class="computeroutput"><span class="identifier">sleep_for</span><span class="special">()</span></code></a>
+</h4></div></div></div>
+<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">namespace</span> <span class="identifier">this_thread</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span><span class="keyword">const</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;&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Suspends the current thread until the time point specified by <code class="computeroutput"><span class="identifier">abs_time</span></code> has been reached.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing if operations of chrono::duration&lt;Rep, Period&gt; do not
+ throw exceptions. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>
+ if the current thread of execution is interrupted.
+ </p></dd>
+<dt><span class="term">Notes:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">sleep_for</span><span class="special">()</span></code>
+ is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption
+ points</em></span></a>.
+ </p></dd>
</dl>
</div>
</div>
@@ -1437,7 +2190,7 @@
<span class="keyword">namespace</span> <span class="identifier">this_thread</span>
<span class="special">{</span>
- <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<div class="variablelist">
@@ -1457,8 +2210,8 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.this_thread.disable_interruption"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption">Class
- <code class="computeroutput"><span class="identifier">disable_interruption</span></code></a>
+<a name="thread.thread_management.this_thread.disable_interruption"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION">Class
+ <code class="computeroutput"><span class="identifier">disable_interruption</span></code> EXTENSION</a>
</h4></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.disable_interruption.constructor">Constructor</a></span></dt>
@@ -1471,8 +2224,10 @@
<span class="keyword">class</span> <span class="identifier">disable_interruption</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
- <span class="identifier">disable_interruption</span><span class="special">();</span>
- <span class="special">~</span><span class="identifier">disable_interruption</span><span class="special">();</span>
+ <span class="identifier">disable_interruption</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">disable_interruption</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
+ <span class="identifier">disable_interruption</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">disable_interruption</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
+ <span class="identifier">disable_interruption</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="special">~</span><span class="identifier">disable_interruption</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="special">};</span>
<span class="special">}</span>
</pre>
@@ -1486,19 +2241,19 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.this_thread.disable_interruption.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption.constructor" title="Constructor">Constructor</a>
</h5></div></div></div>
-<pre class="programlisting"><span class="identifier">disable_interruption</span><span class="special">();</span>
+<pre class="programlisting"><span class="identifier">disable_interruption</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
<dl>
<dt><span class="term">Effects:</span></dt>
<dd><p>
- Stores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+ Stores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
and disables interruption for the current thread.
</p></dd>
<dt><span class="term">Postconditions:</span></dt>
<dd><p>
- <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+ <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
returns <code class="computeroutput"><span class="keyword">false</span></code> for
the current thread.
</p></dd>
@@ -1513,7 +2268,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.this_thread.disable_interruption.destructor"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption.destructor" title="Destructor">Destructor</a>
</h5></div></div></div>
-<pre class="programlisting"><span class="special">~</span><span class="identifier">disable_interruption</span><span class="special">();</span>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">disable_interruption</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1524,12 +2279,12 @@
</p></dd>
<dt><span class="term">Effects:</span></dt>
<dd><p>
- Restores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+ Restores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
for the current thread to that prior to the construction of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
</p></dd>
<dt><span class="term">Postconditions:</span></dt>
<dd><p>
- <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+ <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
for the current thread returns the value stored in the constructor
of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
</p></dd>
@@ -1543,8 +2298,8 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.this_thread.restore_interruption"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption">Class
- <code class="computeroutput"><span class="identifier">restore_interruption</span></code></a>
+<a name="thread.thread_management.this_thread.restore_interruption"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption EXTENSION">Class
+ <code class="computeroutput"><span class="identifier">restore_interruption</span></code> EXTENSION</a>
</h4></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.restore_interruption.constructor">Constructor</a></span></dt>
@@ -1557,15 +2312,17 @@
<span class="keyword">class</span> <span class="identifier">restore_interruption</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">explicit</span> <span class="identifier">restore_interruption</span><span class="special">(</span><span class="identifier">disable_interruption</span><span class="special">&amp;</span> <span class="identifier">disabler</span><span class="special">);</span>
- <span class="special">~</span><span class="identifier">restore_interruption</span><span class="special">();</span>
+ <span class="identifier">restore_interruption</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">restore_interruption</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
+ <span class="identifier">restore_interruption</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">restore_interruption</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
+ <span class="keyword">explicit</span> <span class="identifier">restore_interruption</span><span class="special">(</span><span class="identifier">disable_interruption</span><span class="special">&amp;</span> <span class="identifier">disabler</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
+ <span class="special">~</span><span class="identifier">restore_interruption</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
<span class="special">};</span>
<span class="special">}</span>
</pre>
<p>
On construction of an instance of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code>,
the interruption state for the current thread is restored to the interruption
- state stored by the constructor of the supplied instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>. When the
+ state stored by the constructor of the supplied instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>. When the
instance is destroyed, interruption is again disabled. Instances of <code class="computeroutput"><span class="identifier">restore_interruption</span></code> cannot be copied
or moved.
</p>
@@ -1573,7 +2330,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.this_thread.restore_interruption.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption.constructor" title="Constructor">Constructor</a>
</h5></div></div></div>
-<pre class="programlisting"><span class="keyword">explicit</span> <span class="identifier">restore_interruption</span><span class="special">(</span><span class="identifier">disable_interruption</span><span class="special">&amp;</span> <span class="identifier">disabler</span><span class="special">);</span>
+<pre class="programlisting"><span class="keyword">explicit</span> <span class="identifier">restore_interruption</span><span class="special">(</span><span class="identifier">disable_interruption</span><span class="special">&amp;</span> <span class="identifier">disabler</span><span class="special">)</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1585,12 +2342,12 @@
</p></dd>
<dt><span class="term">Effects:</span></dt>
<dd><p>
- Restores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+ Restores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
for the current thread to that prior to the construction of <code class="computeroutput"><span class="identifier">disabler</span></code>.
</p></dd>
<dt><span class="term">Postconditions:</span></dt>
<dd><p>
- <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+ <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
for the current thread returns the value stored in the constructor
of <code class="computeroutput"><span class="identifier">disabler</span></code>.
</p></dd>
@@ -1605,7 +2362,7 @@
<div class="titlepage"><div><div><h5 class="title">
<a name="thread.thread_management.this_thread.restore_interruption.destructor"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption.destructor" title="Destructor">Destructor</a>
</h5></div></div></div>
-<pre class="programlisting"><span class="special">~</span><span class="identifier">restore_interruption</span><span class="special">();</span>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">restore_interruption</span><span class="special">()</span> <span class="identifier">noexcept</span><span class="special">;</span>
</pre>
<div class="variablelist">
<p class="title"><b></b></p>
@@ -1620,7 +2377,7 @@
</p></dd>
<dt><span class="term">Postconditions:</span></dt>
<dd><p>
- <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
+ <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>
for the current thread returns <code class="computeroutput"><span class="keyword">false</span></code>.
</p></dd>
<dt><span class="term">Throws:</span></dt>
@@ -1633,8 +2390,8 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
-<a name="thread.thread_management.this_thread.atthreadexit"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.atthreadexit" title="Non-member function template at_thread_exit()">Non-member
- function template <code class="computeroutput"><span class="identifier">at_thread_exit</span><span class="special">()</span></code></a>
+<a name="thread.thread_management.this_thread.atthreadexit"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.atthreadexit" title="Non-member function template at_thread_exit() EXTENSION">Non-member
+ function template <code class="computeroutput"><span class="identifier">at_thread_exit</span><span class="special">()</span></code> EXTENSION</a>
</h4></div></div></div>
<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">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
@@ -1908,7 +2665,7 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2007 -8 Anthony Williams<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2007 -11 Anthony Williams<br>Copyright &#169; 2011 -12 Vicente J. Botet Escriba<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
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>)
</p>