Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r68960 - in sandbox/interthreads/libs/interthreads/doc: . html html/toward_boost_interthreads html/toward_boost_interthreads/appendices html/toward_boost_interthreads/examples html/toward_boost_interthreads/overview html/toward_boost_interthreads/reference html/toward_boost_interthreads/users_guide
From: vicente.botet_at_[hidden]
Date: 2011-02-16 14:38:24


Author: viboes
Date: 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
New Revision: 68960
URL: http://svn.boost.org/trac/boost/changeset/68960

Log:
Interthreads: update doc
Text files modified:
   sandbox/interthreads/libs/interthreads/doc/Jamfile.v2 | 17
   sandbox/interthreads/libs/interthreads/doc/html/index.html | 102
   sandbox/interthreads/libs/interthreads/doc/html/standalone_HTML.manifest | 23
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices.html | 1931 ++++++++++++++++++++++++++
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/acknowledgements.html | 21
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/changes.html | 109
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/implementation.html | 181 +-
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/rationale.html | 1442 +++++++++----------
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/tests.html | 23
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/tickets.html | 277 +-
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/todo.html | 185 +-
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/examples.html | 324 ++++
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/examples/thread_safe_deferred_traces.html | 64
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/overview.html | 476 ++++-
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/overview/motivation.html | 75
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference.html | 2857 +++++++++++++++++++++++++++++++++++++++
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/concepts.html | 20
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/keep_alive_file_hpp.html | 272 +--
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/set_once_hpp.html | 53
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_decoration_hpp.html | 165 +-
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_decorator_hpp.html | 474 +++---
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_group_once_hpp.html | 482 +++---
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_specific_shared_ptr_hpp.html | 634 ++++----
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_tuple_hpp.html | 541 +++----
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_tuple_once_hpp.html | 514 +++---
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/users_guide.html | 1753 ++++++++++++++++++++++++
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/users_guide/bibliography.html | 26
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/users_guide/getting_started.html | 180 +-
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/users_guide/glosary.html | 62
   sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/users_guide/tutorial.html | 372 ++---
   sandbox/interthreads/libs/interthreads/doc/interthreads.qbk | 9
   sandbox/interthreads/libs/interthreads/doc/overview.qbk | 72
   sandbox/interthreads/libs/interthreads/doc/rationale.qbk | 16
   sandbox/interthreads/libs/interthreads/doc/users_guide.qbk | 5
   34 files changed, 10044 insertions(+), 3713 deletions(-)

Modified: sandbox/interthreads/libs/interthreads/doc/Jamfile.v2
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/Jamfile.v2 (original)
+++ sandbox/interthreads/libs/interthreads/doc/Jamfile.v2 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -17,7 +17,7 @@
         # Use graphics not text for navigation:
         <xsl:param>navig.graphics=1
         # How far down we chunk nested sections, basically all of them:
- <xsl:param>chunk.section.depth=2
+ <xsl:param>chunk.section.depth=1
         # Don't put the first section on the same page as the TOC:
         <xsl:param>chunk.first.sections=1
         # How far down sections get TOC's
@@ -31,15 +31,15 @@
         # Path for libraries index:
         <xsl:param>boost.libraries=../../../../libs/libraries.htm
         # Use the main Boost stylesheet:
- <xsl:param>html.stylesheet=../../../../doc/html/boostbook.css
+ <xsl:param>html.stylesheet=../../../../doc/src/boostbook.css
 
         # PDF Options:
         # TOC Generation: this is needed for FOP-0.9 and later:
- #<xsl:param>fop1.extensions=1
+ <format>pdf:<xsl:param>fop1.extensions=0
         # Or enable this if you're using XEP:
- <xsl:param>xep.extensions=1
+ <format>pdf:<xsl:param>xep.extensions=1
         # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
- <xsl:param>fop.extensions=0
+ <format>pdf:<xsl:param>fop.extensions=0
         # No indent on body text:
         <xsl:param>body.start.indent=0pt
         # Margin size:
@@ -52,6 +52,9 @@
         # default pnd graphics are awful in PDF form,
         # better use SVG's instead:
         <format>pdf:<xsl:param>admon.graphics.extension=".svg"
- <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
- ;
+ <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)
+ <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/interthreads/doc/html
+ ;
+
+install pdf-install : standalone : <location>. <install-type>PDF ;
 

Modified: sandbox/interthreads/libs/interthreads/doc/html/index.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/index.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/index.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,12 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Toward Boost.InterThreads</title>
-<link rel="stylesheet" href="../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="index.html" title="Toward Boost.InterThreads">
-<link rel="next" href="toward_boost_interthreads/overview.html" title=" Overview">
+<title>Toward Boost.InterThreads 0.1.3</title>
+<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="next" href="toward_boost_interthreads/overview.html" title="Overview">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -19,17 +18,17 @@
 </tr></table>
 <hr>
 <div class="spirit-nav"><a accesskey="n" href="toward_boost_interthreads/overview.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
-<div class="article" lang="en">
+<div class="article">
 <div class="titlepage">
 <div>
 <div><h2 class="title">
-<a name="toward_boost_interthreads"></a>Toward Boost.InterThreads</h2></div>
+<a name="toward_boost_interthreads"></a>Toward Boost.InterThreads 0.1.3</h2></div>
 <div><div class="authorgroup"><div class="author"><h3 class="author">
 <span class="firstname">Vicente J.</span> <span class="surname">Botet Escriba</span>
 </h3></div></div></div>
-<div><p class="copyright">Copyright &#169; 2008 -2009 Vicente J. Botet Escriba</p></div>
+<div><p class="copyright">Copyright &#169; 2008 -2009,2011 Vicente J. Botet Escriba</p></div>
 <div><div class="legalnotice">
-<a name="id4946174"></a><p>
+<a name="id3012888"></a><p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
         file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       </p>
@@ -40,56 +39,56 @@
 <div class="toc">
 <p><b>Table of Contents</b></p>
 <dl>
-<dt><span class="section"> Overview</span></dt>
-<dd><dl><dt><span class="section"> Motivation</span></dt></dl></dd>
-<dt><span class="section"> Users'Guide</span></dt>
+<dt><span class="section">Overview</span></dt>
 <dd><dl>
-<dt><span class="section"><a href="toward_boost_interthreads/users_guide/getting_started.html">
- Getting Started</a></span></dt>
-<dt><span class="section"> Tutorial</span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/users_guide/bibliography.html">
- References</a></span></dt>
-<dt><span class="section"> Glossary</span></dt>
+<dt><span class="section">Motivation</span></dt>
+<dt><span class="section">Description</span></dt>
 </dl></dd>
-<dt><span class="section"> Reference</span></dt>
+<dt><span class="section">Users'Guide</span></dt>
 <dd><dl>
-<dt><span class="section">Concepts</span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/reference/thread_decoration_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decoration</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/reference/thread_decorator_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decorator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/reference/thread_specific_shared_ptr_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/reference/keep_alive_file_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_keep_alive</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/reference/set_once_hpp.html"> Header
+<dt><span class="section"><a href="toward_boost_interthreads/users_guide.html#toward_boost_interthreads.users_guide.getting_started">Getting
+ Started</a></span></dt>
+<dt><span class="section">Tutorial</span></dt>
+<dt><span class="section">Examples</span></dt>
+<dt><span class="section">References</span></dt>
+<dt><span class="section">Glossary</span></dt>
+</dl></dd>
+<dt><span class="section">Reference</span></dt>
+<dd><dl>
+<dt><span class="section">Concepts</span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/reference.html#toward_boost_interthreads.reference.thread_decoration_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decoration</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/reference.html#toward_boost_interthreads.reference.thread_decorator_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decorator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_keep_alive</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/reference.html#toward_boost_interthreads.reference.set_once_hpp">Header
       <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">set_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/reference/thread_tuple_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/reference/thread_tuple_once_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/reference/thread_group_once_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_group_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/reference.html#toward_boost_interthreads.reference.thread_tuple_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/reference.html#toward_boost_interthreads.reference.thread_group_once_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_group_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 </dl></dd>
-<dt><span class="section">Examples</span></dt>
-<dd><dl><dt><span class="section"><a href="toward_boost_interthreads/examples/thread_safe_deferred_traces.html">Thread
- safe deferred traces</a></span></dt></dl></dd>
 <dt><span class="section">Appendices</span></dt>
 <dd><dl>
-<dt><span class="section"><a href="toward_boost_interthreads/appendices/changes.html"> Appendix
+<dt><span class="section"><a href="toward_boost_interthreads/appendices.html#toward_boost_interthreads.appendices.changes">Appendix
       A: History</a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/appendices/rationale.html"> Appendix
+<dt><span class="section"><a href="toward_boost_interthreads/appendices.html#toward_boost_interthreads.appendices.rationale">Appendix
       B: Rationale</a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/appendices/implementation.html">
- Appendix C: Implementation Notes</a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/appendices/acknowledgements.html">
- Appendix D: Acknowledgments</a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/appendices/tests.html"> Appendix
+<dt><span class="section"><a href="toward_boost_interthreads/appendices.html#toward_boost_interthreads.appendices.implementation">Appendix
+ C: Implementation Notes</a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/appendices.html#toward_boost_interthreads.appendices.acknowledgements">Appendix
+ D: Acknowledgments</a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/appendices.html#toward_boost_interthreads.appendices.tests">Appendix
       E: Tests</a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/appendices/tickets.html"> Appendix
+<dt><span class="section"><a href="toward_boost_interthreads/appendices.html#toward_boost_interthreads.appendices.tickets">Appendix
       F: Tickets</a></span></dt>
-<dt><span class="section"><a href="toward_boost_interthreads/appendices/todo.html"> Appendix
- G: Future plans</a></span></dt>
+<dt><span class="section"><a href="toward_boost_interthreads/appendices.html#toward_boost_interthreads.appendices.todo">Appendix G:
+ Future plans</a></span></dt>
 </dl></dd>
 </dl>
 </div>
@@ -102,12 +101,9 @@
       Toward Boost.InterThreads is not a part of the Boost libraries.
     </p></td></tr>
 </table></div>
-<p>
- [/
- </p>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: January 16, 2011 at 09:25:40 GMT</small></p></td>
+<td align="left"><p><small>Last revised: February 16, 2011 at 00:18:47 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>

Modified: sandbox/interthreads/libs/interthreads/doc/html/standalone_HTML.manifest
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/standalone_HTML.manifest (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/standalone_HTML.manifest 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,28 +1,5 @@
 index.html
 toward_boost_interthreads/overview.html
-toward_boost_interthreads/overview/motivation.html
 toward_boost_interthreads/users_guide.html
-toward_boost_interthreads/users_guide/getting_started.html
-toward_boost_interthreads/users_guide/tutorial.html
-toward_boost_interthreads/users_guide/bibliography.html
-toward_boost_interthreads/users_guide/glosary.html
 toward_boost_interthreads/reference.html
-toward_boost_interthreads/reference/concepts.html
-toward_boost_interthreads/reference/thread_decoration_hpp.html
-toward_boost_interthreads/reference/thread_decorator_hpp.html
-toward_boost_interthreads/reference/thread_specific_shared_ptr_hpp.html
-toward_boost_interthreads/reference/keep_alive_file_hpp.html
-toward_boost_interthreads/reference/set_once_hpp.html
-toward_boost_interthreads/reference/thread_tuple_hpp.html
-toward_boost_interthreads/reference/thread_tuple_once_hpp.html
-toward_boost_interthreads/reference/thread_group_once_hpp.html
-toward_boost_interthreads/examples.html
-toward_boost_interthreads/examples/thread_safe_deferred_traces.html
 toward_boost_interthreads/appendices.html
-toward_boost_interthreads/appendices/changes.html
-toward_boost_interthreads/appendices/rationale.html
-toward_boost_interthreads/appendices/implementation.html
-toward_boost_interthreads/appendices/acknowledgements.html
-toward_boost_interthreads/appendices/tests.html
-toward_boost_interthreads/appendices/tickets.html
-toward_boost_interthreads/appendices/todo.html

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,16 +1,12 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
 <title>Appendices</title>
-<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="prev" href="examples/thread_safe_deferred_traces.html" title="Thread
- safe deferred traces">
-<link rel="next" href="appendices/changes.html" title=" Appendix
- A: History">
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="up" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="prev" href="reference.html" title="Reference">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -23,69 +19,1924 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="examples/thread_safe_deferred_traces.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="appendices/changes.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="toward_boost_interthreads.appendices"></a>Appendices
+<a name="toward_boost_interthreads.appendices"></a><a class="link" href="appendices.html" title="Appendices">Appendices</a>
 </h2></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"><a href="appendices/changes.html"> Appendix
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.changes">Appendix
       A: History</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="appendices/changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework"><span class="bold"><strong>Version 0.1.3, Mars 29, 2009</strong></span> Extraction of the Asynchonous
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework"><span class="bold"><strong>Version 0.1.3, Mars 29, 2009</strong></span> Extraction of the Asynchonous
         Executor framework</a></span></dt>
-<dt><span class="section">Version 0.1.2, February 8, 2009 Bug fixes</span></dt>
-<dt><span class="section"><a href="appendices/changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets"><span class="bold"><strong>Version 0.1.1, January 14, 2009</strong></span> Bug fixes and test
+<dt><span class="section">Version 0.1.2, February 8, 2009 Bug fixes</span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets"><span class="bold"><strong>Version 0.1.1, January 14, 2009</strong></span> Bug fixes and test
         on more toolsets</a></span></dt>
-<dt><span class="section"><a href="appendices/changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_"><span class="bold"><strong>Version 0.1.0, November 30, 2008</strong></span> <span class="emphasis"><em>Announcement
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_"><span class="bold"><strong>Version 0.1.0, November 30, 2008</strong></span> <span class="emphasis"><em>Announcement
         of Interthreads</em></span></a></span></dt>
-<dt><span class="section">Bugs</span></dt>
+<dt><span class="section">Bugs</span></dt>
 </dl></dd>
-<dt><span class="section"><a href="appendices/rationale.html"> Appendix
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale">Appendix
       B: Rationale</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="appendices/rationale.html#toward_boost_interthreads.appendices.rationale.thread_decorator">Thread
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale.decorator">Thread
         Decorator</a></span></dt>
-<dt><span class="section"><a href="appendices/rationale.html#toward_boost_interthreads.appendices.rationale.thread_specific_storage">Thread
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale.tss">Thread
         Specific Storage</a></span></dt>
-<dt><span class="section"><a href="appendices/rationale.html#toward_boost_interthreads.appendices.rationale.keep_alive">Keep
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale.ka">Keep
         Alive</a></span></dt>
-<dt><span class="section"><a href="appendices/rationale.html#toward_boost_interthreads.appendices.rationale.thread_tuple">Thread
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale.tuple">Thread
         Tuple</a></span></dt>
 </dl></dd>
-<dt><span class="section"><a href="appendices/implementation.html">
- Appendix C: Implementation Notes</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation">Appendix
+ C: Implementation Notes</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="appendices/implementation.html#toward_boost_interthreads.appendices.implementation.thread_decorator">Thread
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_decorator">Thread
         Decorator</a></span></dt>
-<dt><span class="section"><a href="appendices/implementation.html#toward_boost_interthreads.appendices.implementation.thread_specific_storage">Thread
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_specific_storage">Thread
         Specific Storage</a></span></dt>
-<dt><span class="section"><a href="appendices/implementation.html#toward_boost_interthreads.appendices.implementation.keep_alive">Keep
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation.keep_alive">Keep
         Alive</a></span></dt>
-<dt><span class="section"><a href="appendices/implementation.html#toward_boost_interthreads.appendices.implementation.thread_tuple">Thread
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_tuple">Thread
         Tuple</a></span></dt>
 </dl></dd>
-<dt><span class="section"><a href="appendices/acknowledgements.html">
- Appendix D: Acknowledgments</a></span></dt>
-<dt><span class="section"><a href="appendices/tests.html"> Appendix
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.acknowledgements">Appendix
+ D: Acknowledgments</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.tests">Appendix
       E: Tests</a></span></dt>
-<dd><dl><dt><span class="section">thread_specific_shared_pointer</span></dt></dl></dd>
-<dt><span class="section"><a href="appendices/tickets.html"> Appendix
+<dd><dl><dt><span class="section">thread_specific_shared_pointer</span></dt></dl></dd>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.tickets">Appendix
       F: Tickets</a></span></dt>
-<dt><span class="section"><a href="appendices/todo.html"> Appendix
- G: Future plans</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.todo">Appendix G:
+ Future plans</a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="appendices/todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review">Tasks
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review">Tasks
         to do before review</a></span></dt>
-<dt><span class="section"><a href="appendices/todo.html#toward_boost_interthreads.appendices.todo.for_later_releases">For
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases">For
         later releases</a></span></dt>
 </dl></dd>
 </dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.appendices.changes"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.changes" title="Appendix A: History">Appendix
+ A: History</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework"><span class="bold"><strong>Version 0.1.3, Mars 29, 2009</strong></span> Extraction of the Asynchonous
+ Executor framework</a></span></dt>
+<dt><span class="section">Version 0.1.2, February 8, 2009 Bug fixes</span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets"><span class="bold"><strong>Version 0.1.1, January 14, 2009</strong></span> Bug fixes and test
+ on more toolsets</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_"><span class="bold"><strong>Version 0.1.0, November 30, 2008</strong></span> <span class="emphasis"><em>Announcement
+ of Interthreads</em></span></a></span></dt>
+<dt><span class="section">Bugs</span></dt>
+</dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework" title="Version 0.1.3, Mars 29, 2009 Extraction of the Asynchonous Executor framework"><span class="bold"><strong>Version 0.1.3, Mars 29, 2009</strong></span> Extraction of the Asynchonous
+ Executor framework</a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>New Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+ Extraction of the Asynchonous Executor framework
+ </li></ul></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.changes.__version_0_1_2__february_8__2009__bug_fixes"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_2__february_8__2009__bug_fixes" title="Version 0.1.2, February 8, 2009 Bug fixes"><span class="bold"><strong>Version 0.1.2, February 8, 2009</strong></span> Bug fixes</a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>Fixed Bugs:</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>v0.3.1#1: keep alive mechanism crash when setting
+ <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code>
+ before enabling the mechanism.</strong></span> This was due to the fact that
+ there were no default data for the backup.
+ </p>
+<p>
+ <span class="bold"><strong>v0.3.1#2: keep alive mechanism do not detect dead
+ threads.</strong></span> We need to reset the counters only when the period
+ is 0.
+ </p>
+<p>
+ <span class="bold"><strong>v0.3.1#3: The <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code> setting is not recovered by embeeding
+ kep_alive enablers/disablers.</strong></span> The problem is that the <code class="computeroutput"><span class="identifier">on_dead</span><span class="special">()</span></code>
+ the function and the thread pointer were stored on the backup. It is enough
+ to store them on the <code class="computeroutput"><span class="identifier">thread_keep_alive_ctx</span></code>
+ and make the functions thread_safe.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets" title="Version 0.1.1, January 14, 2009 Bug fixes and test on more toolsets"><span class="bold"><strong>Version 0.1.1, January 14, 2009</strong></span> Bug fixes and test
+ on more toolsets</a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>Toolsets:</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ Tested on Linux gcc 3.4.6.
+ </li>
+<li class="listitem">
+ Tested on Linux gcc 4.1.2.
+ </li>
+<li class="listitem">
+ Modification helping Windows (not tested)
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Fixed Bugs:</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>v0.1#1: basic_keep_alive example do not link.</strong></span>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_" title="Version 0.1.0, November 30, 2008 Announcement of Interthreads"><span class="bold"><strong>Version 0.1.0, November 30, 2008</strong></span> <span class="emphasis"><em>Announcement
+ of Interthreads</em></span></a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">thread_decorator</span></code> setup/cleanup
+ thread decorator,
+ </li>
+<li class="listitem">
+ thread specific shared pointer,
+ </li>
+<li class="listitem">
+ thread keep alive mechanism,
+ </li>
+<li class="listitem">
+ thread tuples, set_once synchonizer, thread_tuple_once and thread_group_once.
+ </li>
+</ul></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.changes.__bugs_"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.changes.__bugs_" title="Bugs"><span class="bold"><strong>Bugs</strong></span></a>
+</h4></div></div></div>
+<a name="toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__open_bugs___emphasis_"></a><h6>
+<a name="id3061844"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__open_bugs___emphasis_"><span class="bold"><strong>Open Bugs:</strong></span></a>
+ </h6>
+<a name="toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__fixed_bugs___emphasis_"></a><h6>
+<a name="id3061872"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__fixed_bugs___emphasis_"><span class="bold"><strong>Fixed Bugs:</strong></span></a>
+ </h6>
+<p>
+ <span class="bold"><strong>v0.1.1#1: keep alive mechanism crash when setting
+ set_on_dead_thread before enabling the mechanism.</strong></span> This was due
+ to the fact that there were no default data for the backup.
+ </p>
+<p>
+ <span class="bold"><strong>v0.1.1#2: keep alive mechanism do not detect dead
+ threads.</strong></span> We need to reste the counters only when the period
+ is 0.
+ </p>
+<p>
+ <span class="bold"><strong>v0.1.1#3: The set_on_dead_thread setting is not recovered
+ by embeeding enablers/disablers.</strong></span> The problem is that the on_dead
+ and th thread pointer were stored on the backup. It is enough to store
+ them on the
+ </p>
+<p>
+ <span class="bold"><strong>v0.1#1: basic_keep_alive example do not link.</strong></span>
+ </p>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.appendices.rationale"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.rationale" title="Appendix B: Rationale">Appendix
+ B: Rationale</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale.decorator">Thread
+ Decorator</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale.tss">Thread
+ Specific Storage</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale.ka">Keep
+ Alive</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.rationale.tuple">Thread
+ Tuple</a></span></dt>
+</dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.rationale.decorator"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.rationale.decorator" title="Thread Decorator">Thread
+ Decorator</a>
+</h4></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Function wrapper versus thread refinement</span></dt>
+<dd><p>
+ The threadalert on which this library was initialy based redefined
+ the boost:thread class which called implicitly the wrapper. As the
+ single varying features between both threads was this wrapping of
+ the thread function it has been isolated in the interthreads library.
+ </p></dd>
+<dt><span class="term">Static decoration variables</span></dt>
+<dd><p>
+ Thread decorations construction is not thread safe and must be done
+ before other threads have been created and the <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code> function is called.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.rationale.tss"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.rationale.tss" title="Thread Specific Storage">Thread
+ Specific Storage</a>
+</h4></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Non copiable/Non movable</span></dt>
+<dd><p>
+ Specific pointers are singletons.
+ </p></dd>
+<dt><span class="term">External locking</span></dt>
+<dd><p>
+ In order to ensure thread safety while providing as much functionality
+ as possible the class allows to get the map of thread specific contexts
+ as soon as the application provides a <code class="computeroutput"><span class="identifier">unique_lock</span></code>.
+ </p></dd>
+<dt><span class="term">Mimic thread_specific_ptr</span></dt>
+<dd>
+<p>
+ From the point of view of the current thread thread_specific_shared_ptr
+ behaves as a thread_specific_ptr. From it we takes:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="identifier">thread_specific_shared_ptr</span><span class="special">();</span>
+<span class="keyword">explicit</span> <span class="identifier">thread_specific_shared_ptr</span><span class="special">(</span><span class="keyword">void</span> <span class="special">(*</span><span class="identifier">cleanup_</span><span class="special">)(</span><span class="identifier">shared_ptr_type</span><span class="special">));</span>
+<span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">void</span> <span class="identifier">reset</span><span class="special">();</span>
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">);</span>
+</pre>
+<p>
+ </p>
+</dd>
+<dt><span class="term">Mimic shared_ptr</span></dt>
+<dd>
+<p>
+ From the point of view of the other threads thread_specific_shared_ptr
+ behaves as a shared_ptr lockup. From the point of view of the current
+ thread the stored pointer is located in a shared_pointer, so we can
+ use the shared_ptr deleter feature From shared_ptr takes:
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">void</span> <span class="identifier">reset</span><span class="special">();</span>
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">);</span>
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">d</span><span class="special">);</span>
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">d</span><span class="special">,</span> <span class="identifier">A</span> <span class="identifier">a</span><span class="special">);</span>
+</pre>
+<p>
+ </p>
+</dd>
+<dt><span class="term">Why doesn't thread_specific_shared_ptr provide a release() function?</span></dt>
+<dd><p>
+ As it store a shared_ptr, it cannot give away ownership unless it's
+ unique() because the other copy will still destroy the object.
+ </p></dd>
+</dl>
+</div>
+<a name="toward_boost_interthreads.appendices.rationale.tss._hcmp_tss_comparaing_tsss_and_tss"></a><h6>
+<a name="id3062782"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.rationale.tss._hcmp_tss_comparaing_tsss_and_tss">:hcmp_tss
+ Comparaing TSSS and TSS</a>
+ </h6>
+<div class="table">
+<a name="toward_boost_interthreads.appendices.rationale.tss.tcmp_tss"></a><p class="title"><b>Table&#160;1.&#160;Comparaing TSSS and TSS</b></p>
+<div class="table-contents"><table class="table" summary="Comparaing TSSS and TSS">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Feature
+ </p>
+ </th>
+<th>
+ <p>
+ thread_specific_shared_ptr
+ </p>
+ </th>
+<th>
+ <p>
+ thread_specific_ptr
+ </p>
+ </th>
+<th>
+ <p>
+ Compatible
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ ownership
+ </p>
+ </td>
+<td>
+ <p>
+ shared
+ </p>
+ </td>
+<td>
+ <p>
+ exclusive
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ default constructor
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cleanup constructor
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>: can not delete the pointer
+ </p>
+ </td>
+<td>
+ <p>
+ yes:must delete the pointer
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">get</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">-&gt;()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">*()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">T</span><span class="special">*)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*,</span><span class="identifier">D</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*,</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">A</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">release</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">get_mutex</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">get_map</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">wait_and_get</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.rationale.ka"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.rationale.ka" title="Keep Alive">Keep
+ Alive</a>
+</h4></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Can a thread that has just do a check point be considered as dead
+ less than one second after?</span></dt>
+<dd><p>
+ Whell this depends on the enabling parameters. If the checking parameter
+ is greater than one it could be possible that the thread do a check_point
+ just before the keep alive manager do the check, seen that there
+ are not enough check_points and declaring the thread dead. If you
+ want to avoid this situation let the checkin to 1.
+ </p></dd>
+<dt><span class="term">Nesting enablers and disablers</span></dt>
+<dd><p>
+ Enablers/disablers use RAII, so they can be nested and the context
+ be restored on the destructor.
+ </p></dd>
+<dt><span class="term">Configurable on dead action</span></dt>
+<dd><p>
+ The default action is to abort the process because I don't see any
+ generic and cleaner way to manage this event. The library provides
+ this hook for user wanting to try something specific.
+ </p></dd>
+<dt><span class="term">Who control the controler?</span></dt>
+<dd><p>
+ There is no way to control this thread other than adding an external
+ process.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.rationale.tuple"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.rationale.tuple" title="Thread Tuple">Thread
+ Tuple</a>
+</h4></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Why must be not copiable?</span></dt>
+<dd><p>
+ Thread tuples can not be copiable since boost::thread is not copiable.
+ </p></dd>
+<dt><span class="term">Why should be movable?</span></dt>
+<dd><p>
+ If we want functions to return Thread tuples it is necessary to make
+ them movable.
+ </p></dd>
+<dt><span class="term">Mimic boost::thread_group</span></dt>
+<dd>
+<p>
+ thread_tuple has in common some function found in thread_group. From
+ it we take
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join_all</span><span class="special">();</span>
+<span class="keyword">void</span> <span class="identifier">interrupt_all</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>
+</pre>
+<p>
+ </p>
+</dd>
+<dt><span class="term">Mimic boost::thread</span></dt>
+<dd>
+<p>
+ We can consider a thread tuple as a compound thread, and so we can
+ mimic the thread intyerface. From it we takes
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
+<span class="keyword">void</span> <span class="identifier">interrupt</span><span class="special">();</span>
+<span class="keyword">void</span> <span class="identifier">detach</span><span class="special">/</span><span class="identifier">detach_all</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">timed_join</span><span class="special">/</span><span class="identifier">timed_join_all</span><span class="special">();</span>
+<span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">/</span><span class="identifier">all_joinable</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+</dd>
+<dt><span class="term">Why the user can not modify directly the embeeded threads?</span></dt>
+<dd>
+<p>
+ The library provides a safe function to get a constant thread reference
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
+<p>
+ </p>
+<p>
+ The problem if we provide the non constant variant is that the user
+ can detach them.
+ </p>
+</dd>
+<dt><span class="term">Joining the first finishing thread of a thread tuple</span></dt>
+<dd><p>
+ This functionallity has a price. We need to synchronize all the threads
+ transparently, so we need to wrap the user thread functions.
+ </p></dd>
+</dl>
+</div>
+<a name="toward_boost_interthreads.appendices.rationale.tuple._hcmp_thread_comparaing_thread__thread_group_and_thread_tuple"></a><h6>
+<a name="id3064259"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.rationale.tuple._hcmp_thread_comparaing_thread__thread_group_and_thread_tuple">:hcmp_thread
+ Comparaing thread, thread_group and thread_tuple</a>
+ </h6>
+<div class="table">
+<a name="toward_boost_interthreads.appendices.rationale.tuple.tcmp_thread"></a><p class="title"><b>Table&#160;2.&#160;Comparaing thread, thread_group and thread_tuple</b></p>
+<div class="table-contents"><table class="table" summary="Comparaing thread, thread_group and thread_tuple">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Feature
+ </p>
+ </th>
+<th>
+ <p>
+ thread
+ </p>
+ </th>
+<th>
+ <p>
+ thread_group
+ </p>
+ </th>
+<th>
+ <p>
+ thread_tuple
+ </p>
+ </th>
+<th>
+ <p>
+ Compatible
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ default constructor
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ copiable
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ movable
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no*
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no*
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no*
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no*
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">timed_join_all</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no* *
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">join_first_then_interrupt</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no* * *
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">timed_join_first_then_interrupt</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no* * *
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ no*
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">*</span></dt>
+<dd><p>
+ thread_group could add these synonym functions
+ </p></dd>
+<dt><span class="term">* *</span></dt>
+<dd><p>
+ thread could add the size function returning 1
+ </p></dd>
+<dt><span class="term">* * *</span></dt>
+<dd><p>
+ thread &amp; thread_group could add these functions
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.appendices.implementation"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.implementation" title="Appendix C: Implementation Notes">Appendix
+ C: Implementation Notes</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_decorator">Thread
+ Decorator</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_specific_storage">Thread
+ Specific Storage</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation.keep_alive">Keep
+ Alive</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_tuple">Thread
+ Tuple</a></span></dt>
+</dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.implementation.thread_decorator"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_decorator" title="Thread Decorator">Thread
+ Decorator</a>
+</h4></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Thread safe</span></dt>
+<dd><p>
+ The library is thread safe as far as the thread decorations are declared
+ staticaly, because these variables will be initialized sequentially.
+ </p></dd>
+<dt><span class="term">Chained thread decorations</span></dt>
+<dd><p>
+ All the thread decorations are chained between them.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.implementation.thread_specific_storage"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_specific_storage" title="Thread Specific Storage">Thread
+ Specific Storage</a>
+</h4></div></div></div>
+<p>
+ The Thread-Specific Storage pattern can be implemented in various ways
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">External versus internal thread storage</span></dt>
+<dd><p>
+ The thread specific data collections can be stored either externally
+ to all threads or internally to each thread. The thread_specific_shared_ptr
+ use both ensuring efficiency when the context is requested by the
+ current thread and allowing threads to access thread specific pointer
+ of other threads
+ </p></dd>
+<dt><span class="term">Fixed- vs. variable-sized thread specific key mapping</span></dt>
+<dd><p>
+ This library is based on the the Boost.Thread thread_specific_ptr
+ implementation which use a variable-size map indexed by the address
+ of the object. Future releases will provide fixed and mixed keys.
+ </p></dd>
+<dt><span class="term">Fixed- vs. variable-sized mapping of thread IDs to thread specific
+ pointers</span></dt>
+<dd><p>
+ It may be impractical to have a fixed-size array with an entry for
+ every possible thread ID value. Instead, it is more space efficient
+ to have threads use a dynamic data structure to map thread IDs to
+ thread specific pointers.
+ </p></dd>
+<dt><span class="term">One mapping of thread IDs to thread specific pointers or to thread
+ specific key mapping</span></dt>
+<dd><p>
+ This library maps thread IDs to thread specific pointers to avoid
+ contention on a single map.
+ </p></dd>
+<dt><span class="term">Default versus explicit specific context setting</span></dt>
+<dd><p>
+ This library provides explicit setting. In future release will provide
+ explicit/eager and implicit/lazy specific context setting. Note that
+ implicit setting will need a factory or a default constructible type.
+ </p></dd>
+<dt><span class="term">Ordered or unordered map</span></dt>
+<dd><p>
+ While the thread::id type is ordered, there is no need to use it.
+ The current implementation use an ordered map. Future version will
+ allow the user to configure this.
+ </p></dd>
+<dt><span class="term">Intrusive or not maps</span></dt>
+<dd><p>
+ As the thread specific pointer is stored on only one map the implementation
+ could use an intrusive container. This will be provided in future
+ releases
+ </p></dd>
+<dt><span class="term">Shared versus exclusive locking</span></dt>
+<dd><p>
+ Locating the right TS pointer requires the use of mutex to prevent
+ race conditions. The library use a a shared_mutex because most of
+ the access to the map will be readings by other threads. The problem
+ is that the native conditions can not be used directly with shared
+ mutex. Some benchmarks will be needed before decidinf which implementation
+ is the best.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.implementation.keep_alive"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.implementation.keep_alive" title="Keep Alive">Keep
+ Alive</a>
+</h4></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Ensuring keep alive manager singleton is initialized and the thread
+ specific shared storage is set before use</span></dt>
+<dd><p>
+ The use of the thread decoration ensures that the decoration are
+ called before the user thread function is called. The keep_alive
+ decoration use the call_once to ensure that the keep_alive manager
+ is correctly initialized.
+ </p></dd>
+<dt><span class="term">backup/restore context</span></dt>
+<dd><p>
+ The real thread specific data is stored directly on the stack of
+ enablers/disablers avoiding heap memory. On enablers/disablers construction
+ they store a backup pointer to the nesting context. This allows a
+ quick restore. The keep alive pointer contains just a pointer to
+ this data.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.implementation.thread_tuple"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.implementation.thread_tuple" title="Thread Tuple">Thread
+ Tuple</a>
+</h4></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Joining the first finishing thread</span></dt>
+<dd><p>
+ In order to synchronize the end of all the threads the libarry use
+ a internal class which stores the index of the first thread notifying
+ that it is finished. As the user function has no idea of this index
+ we need to wrap the user thread functions.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.appendices.acknowledgements"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.acknowledgements" title="Appendix D: Acknowledgments">Appendix
+ D: Acknowledgments</a>
+</h3></div></div></div>
+<p>
+ Part of this library (thread_decorator and thread_specific_shared_ptr) are
+ based on the original implementation of threadalert written by Roland Schwarz (thread::init
+ and thread_member_ptr). Many Thanks to Roland that allowed me to adapt his
+ implementation.
+ </p>
+<p>
+ Thanks also must go to Jochen Heckl for the ideas given respect to the thread_tuple::wait_first
+ implementation.
+ </p>
+<p>
+ You can help me to make this library better! Any feedback is very welcome.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.appendices.tests"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.tests" title="Appendix E: Tests">Appendix
+ E: Tests</a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">thread_specific_shared_pointer</span></dt></dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.tests.thread_specific_shared_pointer"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.tests.thread_specific_shared_pointer" title="thread_specific_shared_pointer">thread_specific_shared_pointer</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup></colgroup>
+<tbody></tbody>
+</table></div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.appendices.tickets"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.tickets" title="Appendix F: Tickets">Appendix
+ F: Tickets</a>
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Kind
+ </p>
+ </th>
+<th>
+ <p>
+ Identifier
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Resolution
+ </p>
+ </th>
+<th>
+ <p>
+ State
+ </p>
+ </th>
+<th>
+ <p>
+ Tests
+ </p>
+ </th>
+<th>
+ <p>
+ Version
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ bug
+ </p>
+ </td>
+<td>
+ <p>
+ v0.1#1
+ </p>
+ </td>
+<td>
+ <p>
+ basic_keep_alive example do not link
+ </p>
+ </td>
+<td>
+ <p>
+ Add to the link
+ </p>
+ </td>
+<td>
+ <p>
+ Closed
+ </p>
+ </td>
+<td>
+ <p>
+ See basic_keep_alive.cpp example
+ </p>
+ </td>
+<td>
+ <p>
+ v0.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bug
+ </p>
+ </td>
+<td>
+ <p>
+ v0.1.1#1
+ </p>
+ </td>
+<td>
+ <p>
+ keep alive mechanism crash when setting set_on_dead_thread before
+ enabling the mechanism
+ </p>
+ </td>
+<td>
+ <p>
+ This was due to the fact that there were no default data for the
+ backup.
+ </p>
+ </td>
+<td>
+ <p>
+ Closed
+ </p>
+ </td>
+<td>
+ <p>
+ See basic_keep_alive.cpp example
+ </p>
+ </td>
+<td>
+ <p>
+ v0.4
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bug
+ </p>
+ </td>
+<td>
+ <p>
+ v0.1.1#2
+ </p>
+ </td>
+<td>
+ <p>
+ keep alive mechanism do not detect dead threads
+ </p>
+ </td>
+<td>
+ <p>
+ We need to reset the counters only when the period is 0.
+ </p>
+ </td>
+<td>
+ <p>
+ Closed
+ </p>
+ </td>
+<td>
+ <p>
+ See basic_keep_alive.cpp example
+ </p>
+ </td>
+<td>
+ <p>
+ v0.4
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bug
+ </p>
+ </td>
+<td>
+ <p>
+ v0.1.1#3
+ </p>
+ </td>
+<td>
+ <p>
+ The set_on_dead_thread setting is not recovered by embeeding enablers/disablers
+ </p>
+ </td>
+<td>
+ <p>
+ The problem is that the on_dead and th thread pointer were stored
+ on the backup. It is enough to store them on the
+ </p>
+ </td>
+<td>
+ <p>
+ Closed
+ </p>
+ </td>
+<td>
+ <p>
+ See basic_keep_alive.cpp example
+ </p>
+ </td>
+<td>
+ <p>
+ v0.4
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bug
+ </p>
+ </td>
+<td>
+ <p>
+ v0.2.0#1
+ </p>
+ </td>
+<td>
+ <p>
+ xxx
+ </p>
+ </td>
+<td>
+ <p>
+ xx
+ </p>
+ </td>
+<td>
+ <p>
+ Open
+ </p>
+ </td>
+<td>
+ <p>
+ xxx
+ </p>
+ </td>
+<td>
+ <p>
+ v0.4.1
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.appendices.todo"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo" title="Appendix G: Future plans">Appendix G:
+ Future plans</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review">Tasks
+ to do before review</a></span></dt>
+<dt><span class="section"><a href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases">For
+ later releases</a></span></dt>
+</dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review" title="Tasks to do before review">Tasks
+ to do before review</a>
+</h4></div></div></div>
+<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.complete_the_tests"></a><h6>
+<a name="id3066297"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.complete_the_tests">Complete
+ the tests</a>
+ </h6>
+<p>
+ Even if the current release include some test there is yet a long way before
+ been able to review the library.]]
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ change the test so they take less time using locks; conditions and
+ variables.
+ </li>
+<li class="listitem">
+ Add test with functions throwing
+ </li>
+<li class="listitem">
+ Formalize the tests for thread_decoratoor
+ </li>
+<li class="listitem">
+ Formalize the tests for thread_specific_shared_ptr
+ </li>
+<li class="listitem">
+ Add tests for keep alive mechanism
+ </li>
+</ul></div>
+<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.add_more_examples"></a><h6>
+<a name="id3066370"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.add_more_examples">Add
+ more examples</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ Complete the STM example.
+ </li>
+<li class="listitem">
+ Change the implementation of the file on the async_ostream.
+ </li>
+</ul></div>
+<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.change_the_rational_and_implementation_sections"></a><h6>
+<a name="id3066414"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.change_the_rational_and_implementation_sections">Change
+ the rational and implementation sections</a>
+ </h6>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases"></a><a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases" title="For later releases">For
+ later releases</a>
+</h4></div></div></div>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.add_c__0x_move_semantics_on_compilers_supporting_it_and_use_the_boost_move_emulation_otherwise"></a><h6>
+<a name="id3066456"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases.add_c__0x_move_semantics_on_compilers_supporting_it_and_use_the_boost_move_emulation_otherwise">Add
+ C++0x move semantics on compilers supporting it and use the Boost.Move
+ emulation otherwise</a>
+ </h6>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_variadic_templates_on_compilers_supporting_it_and_use_the_preprocesor_otherwise"></a><h6>
+<a name="id3066486"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_variadic_templates_on_compilers_supporting_it_and_use_the_preprocesor_otherwise">Use
+ C++0x variadic templates on compilers supporting it and use the preprocesor
+ otherwise</a>
+ </h6>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_concepts_on_compilers_supporting_them_and_use_the_boost_conceptcheck_or_boost_concepttraits_otherwise"></a><h6>
+<a name="id3066516"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_concepts_on_compilers_supporting_them_and_use_the_boost_conceptcheck_or_boost_concepttraits_otherwise">Use
+ C++0x Concepts on compilers supporting them and use the Boost.ConceptCheck
+ or Boost.ConceptTraits otherwise</a>
+ </h6>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.add_a_daemon_controlling_all_the_keep_alive_controller_threads"></a><h6>
+<a name="id3066547"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases.add_a_daemon_controlling_all_the_keep_alive_controller_threads">Add
+ a daemon controlling all the keep alive controller threads</a>
+ </h6>
+<p>
+ This daemon will send regular keep_alive messages and kill the process
+ when dead.
+ </p>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.optimize_the_tsss_maps_using_intrusive_containers"></a><h6>
+<a name="id3066584"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases.optimize_the_tsss_maps_using_intrusive_containers">Optimize
+ the TSSS maps using intrusive containers</a>
+ </h6>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.generalize_both_specific_pointers_in_a_template_class_basic_thread_specific_ptr"></a><h6>
+<a name="id3066606"></a>
+ <a class="link" href="appendices.html#toward_boost_interthreads.appendices.todo.for_later_releases.generalize_both_specific_pointers_in_a_template_class_basic_thread_specific_ptr">Generalize
+ both specific pointers in a template class basic_thread_specific_ptr</a>
+ </h6>
+<p>
+ <span class="bold"><strong>Domain Features</strong></span>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">ownership: exclusive/shared</span></dt>
+<dd><p>
+ Specifies if the pointer is exclusive to the thread or shared with
+ other threads.
+ </p></dd>
+<dt><span class="term">key range: fixed/variable/mixed </span></dt>
+<dd><p>
+ Specifies how the key range is defined. fixed has an integer range
+ 0..n, variable takes as key the address of the specific_ptr and mixed
+ use a variant of fixed or variable key.
+ </p></dd>
+<dt><span class="term">key creation: eager/lazy</span></dt>
+<dd><p>
+ Specifies how the key is created, eager at construction time, lazy
+ when needed.
+ </p></dd>
+<dt><span class="term">context setting: eager/lazy</span></dt>
+<dd><p>
+ Specifies how the pointer is set, eager at thread initialization
+ time, lazy when needed.
+ </p></dd>
+</dl>
+</div>
+<p>
+ The current <code class="computeroutput"><span class="identifier">thread_specific_ptr</span></code>
+ is exclusive, has a variable key range and so the key is initialized at
+ construction time and explicit context setting by user on the current thread.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">basic_thread_specific_ptr</span><span class="special">&lt;</span><span class="identifier">exclusive</span><span class="special">,</span> <span class="identifier">variable_key_range</span><span class="special">&lt;&gt;,</span> <span class="identifier">eager_context_setting</span><span class="special">&gt;</span> <span class="identifier">thread_specific_ptr</span><span class="special">;</span>
+</pre>
+<p>
+ The current <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span></code>
+ is shared, has a variable key range and so the key is initialized at construction
+ time and explicit context setting by user on the current thread.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">basic_thread_specific_ptr</span><span class="special">&lt;</span><span class="identifier">exclusive</span><span class="special">,</span> <span class="identifier">variable_key_range</span><span class="special">&lt;&gt;,</span> <span class="identifier">eager_context_setting</span><span class="special">&gt;</span> <span class="identifier">thread_specific_ptr</span><span class="special">;</span>
+</pre>
+<p>
+ <span class="bold"><strong>Design rationale</strong></span>
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_specific_ptr</span></code> uses as key the address
+ of the variable. This has as consequence that the mapping from keys to
+ the thread specific context pointer is much less efficient that the direct
+ access provided by some implementations. In this concern this library would
+ try to improve the performance to this mapping providing direct access
+ keys. As the number of direct access keys must be know at compile time
+ this has a limit on the number of thread specific pointers. A mixed approach
+ would be also provided in which the key could be a fixed one or a variable
+ one. It is up to the user to give an hint of the key sort. When using fixed
+ or mixed keys, there is decision to take related to when the key is created,
+ i.e. eager before the threads starts or lazy when we need it.
+ </p>
+<p>
+ Non-portable: The interfaces of POSIX Pthreads, Solaris threads, and Win32
+ threads are very similar. However, the semantics of Win32 threads are subtly
+ different since they do not provide a reliable means of cleaning up objects
+ allocated in thread-specific storage when a thread exits. Moreover, there
+ is no API to delete a key in Solaris threads. This makes it hard to write
+ portable code among UNIX and Win32 platforms.
+ </p>
+<p>
+ So we need to implement it on top of the underlying OS. The idea is to
+ take a native thread specific pointer which will manage with the fixed,
+ variable and mixed keys. This exactly the approach of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_specific_ptr</span></code>
+ but only for variable keys.
+ </p>
+<p>
+ Just to finish, we need to decide when the context is set, two possibilities:
+ the user sets explicitlly the context when it considers pertinent or the
+ context is created lazily the first time we try to get it. The first approach
+ has the liability that the user needs to ensure that the context is set
+ before get them, but when the context must be set before the function thread
+ starts this is a no issue. The second is safe but has as consequence that
+ every access include a check. In addition the type must be default constructible.
+ </p>
+<pre class="programlisting"><span class="identifier">bith</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;</span><span class="identifier">myclass</span><span class="special">,</span> <span class="identifier">lazy_setting</span><span class="special">&gt;</span> <span class="identifier">ptr</span><span class="special">;</span>
+</pre>
+<p>
+ The pointer will be initilaized when needed as if we had do
+ </p>
+<pre class="programlisting"><span class="keyword">if</span> <span class="special">(</span><span class="identifier">ptr</span><span class="special">.</span><span class="identifier">get</span><span class="special">()==</span><span class="number">0</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">ptr</span><span class="special">.</span><span class="identifier">reset</span><span class="special">(</span> <span class="keyword">new</span> <span class="identifier">myclass</span><span class="special">()</span> <span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Between the features:
+ </p>
+<p>
+ Thread_specific key mapping optimization: Replace the Boost.Thread thread_specific_ptr
+ thread specific key mapping implementation by a mix of fixed/variable mapping
+ which will provide efficient access to the fixed keys and scalability with
+ the others keys.
+ </p>
+<p>
+ Configuration the fixed/variable/mixed key range, ordered/unordered map,
+ intrusive/extrusive map, shared/exclusive locking.
+ </p>
+</div>
+</div>
 </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; 2008 -2009 Vicente J. Botet Escriba<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2008 -2009,2011 Vicente J. Botet Escriba<p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
         file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       </p>
@@ -93,7 +1944,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="examples/thread_safe_deferred_traces.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="appendices/changes.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a>
 </div>
 </body>
 </html>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/acknowledgements.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/acknowledgements.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/acknowledgements.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,17 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>
- Appendix D: Acknowledgments</title>
+<title>Appendix D: Acknowledgments</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
 <link rel="up" href="../appendices.html" title="Appendices">
-<link rel="prev" href="implementation.html" title="
- Appendix C: Implementation Notes">
-<link rel="next" href="tests.html" title=" Appendix
- E: Tests">
+<link rel="prev" href="implementation.html" title="Appendix C: Implementation Notes">
+<link rel="next" href="tests.html" title="Appendix E: Tests">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -26,11 +22,10 @@
 <div class="spirit-nav">
 <a accesskey="p" href="implementation.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tests.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.appendices.acknowledgements"></a><a href="acknowledgements.html" title="
- Appendix D: Acknowledgments">
- Appendix D: Acknowledgments</a>
+<a name="toward_boost_interthreads.appendices.acknowledgements"></a><a class="link" href="acknowledgements.html" title="Appendix D: Acknowledgments">Appendix
+ D: Acknowledgments</a>
 </h3></div></div></div>
 <p>
         Part of this library (thread_decorator and thread_specific_shared_ptr) are

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/changes.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/changes.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/changes.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,16 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Appendix
- A: History</title>
+<title>Appendix A: History</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
 <link rel="up" href="../appendices.html" title="Appendices">
 <link rel="prev" href="../appendices.html" title="Appendices">
-<link rel="next" href="rationale.html" title=" Appendix
- B: Rationale">
+<link rel="next" href="rationale.html" title="Appendix B: Rationale">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -25,10 +22,9 @@
 <div class="spirit-nav">
 <a accesskey="p" href="../appendices.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.appendices.changes"></a><a href="changes.html" title=" Appendix
- A: History"> Appendix
+<a name="toward_boost_interthreads.appendices.changes"></a><a class="link" href="changes.html" title="Appendix A: History">Appendix
       A: History</a>
 </h3></div></div></div>
 <div class="toc"><dl>
@@ -41,22 +37,21 @@
         of Interthreads</em></span></a></span></dt>
 <dt><span class="section">Bugs</span></dt>
 </dl></div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework"></a><a href="changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework" title="Version 0.1.3, Mars 29, 2009 Extraction of the Asynchonous
- Executor framework"><span class="bold"><strong>Version 0.1.3, Mars 29, 2009</strong></span> Extraction of the Asynchonous
+<a name="toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework"></a><a class="link" href="changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_3__mars_29__2009__extraction_of_the_asynchonous_executor_framework" title="Version 0.1.3, Mars 29, 2009 Extraction of the Asynchonous Executor framework"><span class="bold"><strong>Version 0.1.3, Mars 29, 2009</strong></span> Extraction of the Asynchonous
         Executor framework</a>
 </h4></div></div></div>
 <p>
           <span class="bold"><strong>New Features:</strong></span>
         </p>
-<div class="itemizedlist"><ul type="disc"><li>
- Extraction of the Asynchonous Executor framework
- </li></ul></div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+ Extraction of the Asynchonous Executor framework
+ </li></ul></div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.changes.__version_0_1_2__february_8__2009__bug_fixes"></a>Version 0.1.2, February 8, 2009 Bug fixes
+<a name="toward_boost_interthreads.appendices.changes.__version_0_1_2__february_8__2009__bug_fixes"></a><a class="link" href="changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_2__february_8__2009__bug_fixes" title="Version 0.1.2, February 8, 2009 Bug fixes"><span class="bold"><strong>Version 0.1.2, February 8, 2009</strong></span> Bug fixes</a>
 </h4></div></div></div>
 <p>
           <span class="bold"><strong>Fixed Bugs:</strong></span>
@@ -80,25 +75,24 @@
           and make the functions thread_safe.
         </p>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets"></a><a href="changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets" title="Version 0.1.1, January 14, 2009 Bug fixes and test
- on more toolsets"><span class="bold"><strong>Version 0.1.1, January 14, 2009</strong></span> Bug fixes and test
+<a name="toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets"></a><a class="link" href="changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_1__january_14__2009__bug_fixes_and_test_on_more_toolsets" title="Version 0.1.1, January 14, 2009 Bug fixes and test on more toolsets"><span class="bold"><strong>Version 0.1.1, January 14, 2009</strong></span> Bug fixes and test
         on more toolsets</a>
 </h4></div></div></div>
 <p>
           <span class="bold"><strong>Toolsets:</strong></span>
         </p>
-<div class="itemizedlist"><ul type="disc">
-<li>
- Tested on Linux gcc 3.4.6.
- </li>
-<li>
- Tested on Linux gcc 4.1.2.
- </li>
-<li>
- Modification helping Windows (not tested)
- </li>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ Tested on Linux gcc 3.4.6.
+ </li>
+<li class="listitem">
+ Tested on Linux gcc 4.1.2.
+ </li>
+<li class="listitem">
+ Modification helping Windows (not tested)
+ </li>
 </ul></div>
 <p>
           <span class="bold"><strong>Fixed Bugs:</strong></span>
@@ -107,43 +101,42 @@
           <span class="bold"><strong>v0.1#1: basic_keep_alive example do not link.</strong></span>
         </p>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_"></a><a href="changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_" title="Version 0.1.0, November 30, 2008 Announcement
- of Interthreads"><span class="bold"><strong>Version 0.1.0, November 30, 2008</strong></span> <span class="emphasis"><em>Announcement
+<a name="toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_"></a><a class="link" href="changes.html#toward_boost_interthreads.appendices.changes.__version_0_1_0__november_30__2008____announcement_of_interthreads_" title="Version 0.1.0, November 30, 2008 Announcement of Interthreads"><span class="bold"><strong>Version 0.1.0, November 30, 2008</strong></span> <span class="emphasis"><em>Announcement
         of Interthreads</em></span></a>
 </h4></div></div></div>
 <p>
           <span class="bold"><strong>Features:</strong></span>
         </p>
-<div class="itemizedlist"><ul type="disc">
-<li>
-<code class="computeroutput"><span class="identifier">thread_decorator</span></code> setup/cleanup
- thread decorator,
- </li>
-<li>
- thread specific shared pointer,
- </li>
-<li>
- thread keep alive mechanism,
- </li>
-<li>
- thread tuples, set_once synchonizer, thread_tuple_once and thread_group_once.
- </li>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">thread_decorator</span></code> setup/cleanup
+ thread decorator,
+ </li>
+<li class="listitem">
+ thread specific shared pointer,
+ </li>
+<li class="listitem">
+ thread keep alive mechanism,
+ </li>
+<li class="listitem">
+ thread tuples, set_once synchonizer, thread_tuple_once and thread_group_once.
+ </li>
 </ul></div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.changes.__bugs_"></a>Bugs
+<a name="toward_boost_interthreads.appendices.changes.__bugs_"></a><a class="link" href="changes.html#toward_boost_interthreads.appendices.changes.__bugs_" title="Bugs"><span class="bold"><strong>Bugs</strong></span></a>
 </h4></div></div></div>
-<a name="toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__open_bugs___emphasis_"></a><h5>
-<a name="id5034280"></a>
- Open Bugs:
- </h5>
-<a name="toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__fixed_bugs___emphasis_"></a><h5>
-<a name="id5034308"></a>
- Fixed Bugs:
- </h5>
+<a name="toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__open_bugs___emphasis_"></a><h6>
+<a name="id3232394"></a>
+ <a class="link" href="changes.html#toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__open_bugs___emphasis_"><span class="bold"><strong>Open Bugs:</strong></span></a>
+ </h6>
+<a name="toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__fixed_bugs___emphasis_"></a><h6>
+<a name="id3232422"></a>
+ <a class="link" href="changes.html#toward_boost_interthreads.appendices.changes.__bugs_._emphasis_role__bold__fixed_bugs___emphasis_"><span class="bold"><strong>Fixed Bugs:</strong></span></a>
+ </h6>
 <p>
           <span class="bold"><strong>v0.1.1#1: keep alive mechanism crash when setting
           set_on_dead_thread before enabling the mechanism.</strong></span> This was due

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/implementation.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/implementation.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/implementation.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,17 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>
- Appendix C: Implementation Notes</title>
+<title>Appendix C: Implementation Notes</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
 <link rel="up" href="../appendices.html" title="Appendices">
-<link rel="prev" href="rationale.html" title=" Appendix
- B: Rationale">
-<link rel="next" href="acknowledgements.html" title="
- Appendix D: Acknowledgments">
+<link rel="prev" href="rationale.html" title="Appendix B: Rationale">
+<link rel="next" href="acknowledgements.html" title="Appendix D: Acknowledgments">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -26,11 +22,10 @@
 <div class="spirit-nav">
 <a accesskey="p" href="rationale.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.appendices.implementation"></a><a href="implementation.html" title="
- Appendix C: Implementation Notes">
- Appendix C: Implementation Notes</a>
+<a name="toward_boost_interthreads.appendices.implementation"></a><a class="link" href="implementation.html" title="Appendix C: Implementation Notes">Appendix
+ C: Implementation Notes</a>
 </h3></div></div></div>
 <div class="toc"><dl>
 <dt><span class="section"><a href="implementation.html#toward_boost_interthreads.appendices.implementation.thread_decorator">Thread
@@ -42,10 +37,9 @@
 <dt><span class="section"><a href="implementation.html#toward_boost_interthreads.appendices.implementation.thread_tuple">Thread
         Tuple</a></span></dt>
 </dl></div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.implementation.thread_decorator"></a><a href="implementation.html#toward_boost_interthreads.appendices.implementation.thread_decorator" title="Thread
- Decorator">Thread
+<a name="toward_boost_interthreads.appendices.implementation.thread_decorator"></a><a class="link" href="implementation.html#toward_boost_interthreads.appendices.implementation.thread_decorator" title="Thread Decorator">Thread
         Decorator</a>
 </h4></div></div></div>
 <div class="variablelist">
@@ -53,20 +47,19 @@
 <dl>
 <dt><span class="term">Thread safe</span></dt>
 <dd><p>
- The library is thread safe as far as the thread decorations are declared
- staticaly, because these variables will be initialized sequentially.
- </p></dd>
+ The library is thread safe as far as the thread decorations are declared
+ staticaly, because these variables will be initialized sequentially.
+ </p></dd>
 <dt><span class="term">Chained thread decorations</span></dt>
 <dd><p>
- All the thread decorations are chained between them.
- </p></dd>
+ All the thread decorations are chained between them.
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.implementation.thread_specific_storage"></a><a href="implementation.html#toward_boost_interthreads.appendices.implementation.thread_specific_storage" title="Thread
- Specific Storage">Thread
+<a name="toward_boost_interthreads.appendices.implementation.thread_specific_storage"></a><a class="link" href="implementation.html#toward_boost_interthreads.appendices.implementation.thread_specific_storage" title="Thread Specific Storage">Thread
         Specific Storage</a>
 </h4></div></div></div>
 <p>
@@ -77,94 +70,92 @@
 <dl>
 <dt><span class="term">External versus internal thread storage</span></dt>
 <dd><p>
- The thread specific data collections can be stored either externally
- to all threads or internally to each thread. The thread_specific_shared_ptr
- use both ensuring efficiency when the context is requested by the current
- thread and allowing threads to access thread specific pointer of other
- threads
- </p></dd>
-<dt><span class="term">Fixed- vs. variable-sized thread specific
- key mapping</span></dt>
-<dd><p>
- This library is based on the the Boost.Thread thread_specific_ptr implementation
- which use a variable-size map indexed by the address of the object.
- Future releases will provide fixed and mixed keys.
- </p></dd>
-<dt><span class="term">Fixed- vs. variable-sized mapping of
- thread IDs to thread specific pointers</span></dt>
-<dd><p>
- It may be impractical to have a fixed-size array with an entry for
- every possible thread ID value. Instead, it is more space efficient
- to have threads use a dynamic data structure to map thread IDs to thread
- specific pointers.
- </p></dd>
-<dt><span class="term">One mapping of thread IDs to thread
- specific pointers or to thread specific key mapping</span></dt>
-<dd><p>
- This library maps thread IDs to thread specific pointers to avoid contention
- on a single map.
- </p></dd>
-<dt><span class="term">Default versus explicit specific context
- setting</span></dt>
-<dd><p>
- This library provides explicit setting. In future release will provide
- explicit/eager and implicit/lazy specific context setting. Note that
- implicit setting will need a factory or a default constructible type.
- </p></dd>
+ The thread specific data collections can be stored either externally
+ to all threads or internally to each thread. The thread_specific_shared_ptr
+ use both ensuring efficiency when the context is requested by the
+ current thread and allowing threads to access thread specific pointer
+ of other threads
+ </p></dd>
+<dt><span class="term">Fixed- vs. variable-sized thread specific key mapping</span></dt>
+<dd><p>
+ This library is based on the the Boost.Thread thread_specific_ptr
+ implementation which use a variable-size map indexed by the address
+ of the object. Future releases will provide fixed and mixed keys.
+ </p></dd>
+<dt><span class="term">Fixed- vs. variable-sized mapping of thread IDs to thread specific
+ pointers</span></dt>
+<dd><p>
+ It may be impractical to have a fixed-size array with an entry for
+ every possible thread ID value. Instead, it is more space efficient
+ to have threads use a dynamic data structure to map thread IDs to
+ thread specific pointers.
+ </p></dd>
+<dt><span class="term">One mapping of thread IDs to thread specific pointers or to thread
+ specific key mapping</span></dt>
+<dd><p>
+ This library maps thread IDs to thread specific pointers to avoid
+ contention on a single map.
+ </p></dd>
+<dt><span class="term">Default versus explicit specific context setting</span></dt>
+<dd><p>
+ This library provides explicit setting. In future release will provide
+ explicit/eager and implicit/lazy specific context setting. Note that
+ implicit setting will need a factory or a default constructible type.
+ </p></dd>
 <dt><span class="term">Ordered or unordered map</span></dt>
 <dd><p>
- While the thread::id type is ordered, there is no need to use it. The
- current implementation use an ordered map. Future version will allow
- the user to configure this.
- </p></dd>
+ While the thread::id type is ordered, there is no need to use it.
+ The current implementation use an ordered map. Future version will
+ allow the user to configure this.
+ </p></dd>
 <dt><span class="term">Intrusive or not maps</span></dt>
 <dd><p>
- As the thread specific pointer is stored on only one map the implementation
- could use an intrusive container. This will be provided in future releases
- </p></dd>
+ As the thread specific pointer is stored on only one map the implementation
+ could use an intrusive container. This will be provided in future
+ releases
+ </p></dd>
 <dt><span class="term">Shared versus exclusive locking</span></dt>
 <dd><p>
- Locating the right TS pointer requires the use of mutex to prevent
- race conditions. The library use a a shared_mutex because most of the
- access to the map will be readings by other threads. The problem is
- that the native conditions can not be used directly with shared mutex.
- Some benchmarks will be needed before decidinf which implementation
- is the best.
- </p></dd>
+ Locating the right TS pointer requires the use of mutex to prevent
+ race conditions. The library use a a shared_mutex because most of
+ the access to the map will be readings by other threads. The problem
+ is that the native conditions can not be used directly with shared
+ mutex. Some benchmarks will be needed before decidinf which implementation
+ is the best.
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.implementation.keep_alive"></a><a href="implementation.html#toward_boost_interthreads.appendices.implementation.keep_alive" title="Keep
- Alive">Keep
+<a name="toward_boost_interthreads.appendices.implementation.keep_alive"></a><a class="link" href="implementation.html#toward_boost_interthreads.appendices.implementation.keep_alive" title="Keep Alive">Keep
         Alive</a>
 </h4></div></div></div>
 <div class="variablelist">
 <p class="title"><b></b></p>
 <dl>
-<dt><span class="term">Ensuring keep alive manager singleton
- is initialized and the thread specific shared storage is set before use</span></dt>
+<dt><span class="term">Ensuring keep alive manager singleton is initialized and the thread
+ specific shared storage is set before use</span></dt>
 <dd><p>
- The use of the thread decoration ensures that the decoration are called
- before the user thread function is called. The keep_alive decoration
- use the call_once to ensure that the keep_alive manager is correctly
- initialized.
- </p></dd>
+ The use of the thread decoration ensures that the decoration are
+ called before the user thread function is called. The keep_alive
+ decoration use the call_once to ensure that the keep_alive manager
+ is correctly initialized.
+ </p></dd>
 <dt><span class="term">backup/restore context</span></dt>
 <dd><p>
- The real thread specific data is stored directly on the stack of enablers/disablers
- avoiding heap memory. On enablers/disablers construction they store
- a backup pointer to the nesting context. This allows a quick restore.
- The keep alive pointer contains just a pointer to this data.
- </p></dd>
+ The real thread specific data is stored directly on the stack of
+ enablers/disablers avoiding heap memory. On enablers/disablers construction
+ they store a backup pointer to the nesting context. This allows a
+ quick restore. The keep alive pointer contains just a pointer to
+ this data.
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.implementation.thread_tuple"></a><a href="implementation.html#toward_boost_interthreads.appendices.implementation.thread_tuple" title="Thread
- Tuple">Thread
+<a name="toward_boost_interthreads.appendices.implementation.thread_tuple"></a><a class="link" href="implementation.html#toward_boost_interthreads.appendices.implementation.thread_tuple" title="Thread Tuple">Thread
         Tuple</a>
 </h4></div></div></div>
 <div class="variablelist">
@@ -172,11 +163,11 @@
 <dl>
 <dt><span class="term">Joining the first finishing thread</span></dt>
 <dd><p>
- In order to synchronize the end of all the threads the libarry use
- a internal class which stores the index of the first thread notifying
- that it is finished. As the user function has no idea of this index
- we need to wrap the user thread functions.
- </p></dd>
+ In order to synchronize the end of all the threads the libarry use
+ a internal class which stores the index of the first thread notifying
+ that it is finished. As the user function has no idea of this index
+ we need to wrap the user thread functions.
+ </p></dd>
 </dl>
 </div>
 </div>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/rationale.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/rationale.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/rationale.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,17 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Appendix
- B: Rationale</title>
+<title>Appendix B: Rationale</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
 <link rel="up" href="../appendices.html" title="Appendices">
-<link rel="prev" href="changes.html" title=" Appendix
- A: History">
-<link rel="next" href="implementation.html" title="
- Appendix C: Implementation Notes">
+<link rel="prev" href="changes.html" title="Appendix A: History">
+<link rel="next" href="implementation.html" title="Appendix C: Implementation Notes">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -26,10 +22,9 @@
 <div class="spirit-nav">
 <a accesskey="p" href="changes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="implementation.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.appendices.rationale"></a><a href="rationale.html" title=" Appendix
- B: Rationale"> Appendix
+<a name="toward_boost_interthreads.appendices.rationale"></a><a class="link" href="rationale.html" title="Appendix B: Rationale">Appendix
       B: Rationale</a>
 </h3></div></div></div>
 <div class="toc"><dl>
@@ -42,10 +37,9 @@
 <dt><span class="section"><a href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_tuple">Thread
         Tuple</a></span></dt>
 </dl></div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.rationale.thread_decorator"></a><a href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_decorator" title="Thread
- Decorator">Thread
+<a name="toward_boost_interthreads.appendices.rationale.thread_decorator"></a><a class="link" href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_decorator" title="Thread Decorator">Thread
         Decorator</a>
 </h4></div></div></div>
 <div class="variablelist">
@@ -53,23 +47,22 @@
 <dl>
 <dt><span class="term">Function wrapper versus thread refinement</span></dt>
 <dd><p>
- The threadalert on which this library was initialy based redefined
- the boost:thread class which called implicitly the wrapper. As the
- single varying features between both threads was this wrapping of the
- thread function it has been isolated in the interthreads library.
- </p></dd>
+ The threadalert on which this library was initialy based redefined
+ the boost:thread class which called implicitly the wrapper. As the
+ single varying features between both threads was this wrapping of
+ the thread function it has been isolated in the interthreads library.
+ </p></dd>
 <dt><span class="term">Static decoration variables</span></dt>
 <dd><p>
- Thread decorations construction is not thread safe and must be done
- before other threads have been created and the <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code> function is called.
- </p></dd>
+ Thread decorations construction is not thread safe and must be done
+ before other threads have been created and the <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code> function is called.
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.rationale.thread_specific_storage"></a><a href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_specific_storage" title="Thread
- Specific Storage">Thread
+<a name="toward_boost_interthreads.appendices.rationale.thread_specific_storage"></a><a class="link" href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_specific_storage" title="Thread Specific Storage">Thread
         Specific Storage</a>
 </h4></div></div></div>
 <div class="variablelist">
@@ -77,25 +70,24 @@
 <dl>
 <dt><span class="term">Non copiable/Non movable</span></dt>
 <dd><p>
- Specific pointers are singletons.
- </p></dd>
+ Specific pointers are singletons.
+ </p></dd>
 <dt><span class="term">External locking</span></dt>
 <dd><p>
- In order to ensure thread safety while providing as much functionality
- as possible the class allows to get the map of thread specific contexts
- as soon as the application provides a <code class="computeroutput"><span class="identifier">unique_lock</span></code>.
- </p></dd>
+ In order to ensure thread safety while providing as much functionality
+ as possible the class allows to get the map of thread specific contexts
+ as soon as the application provides a <code class="computeroutput"><span class="identifier">unique_lock</span></code>.
+ </p></dd>
 <dt><span class="term">Mimic thread_specific_ptr</span></dt>
 <dd>
 <p>
- From the point of view of the current thread thread_specific_shared_ptr
- behaves as a thread_specific_ptr. From it we takes:
- </p>
+ From the point of view of the current thread thread_specific_shared_ptr
+ behaves as a thread_specific_ptr. From it we takes:
+ </p>
 <p>
-
+
 </p>
-<pre class="programlisting">
-<span class="identifier">thread_specific_shared_ptr</span><span class="special">();</span>
+<pre class="programlisting"><span class="identifier">thread_specific_shared_ptr</span><span class="special">();</span>
 <span class="keyword">explicit</span> <span class="identifier">thread_specific_shared_ptr</span><span class="special">(</span><span class="keyword">void</span> <span class="special">(*</span><span class="identifier">cleanup_</span><span class="special">)(</span><span class="identifier">shared_ptr_type</span><span class="special">));</span>
 <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
 <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;()</span> <span class="keyword">const</span><span class="special">;</span>
@@ -104,21 +96,20 @@
 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">);</span>
 </pre>
 <p>
- </p>
+ </p>
 </dd>
 <dt><span class="term">Mimic shared_ptr</span></dt>
 <dd>
 <p>
- From the point of view of the other threads thread_specific_shared_ptr
- behaves as a shared_ptr lockup. From the point of view of the current
- thread the stored pointer is located in a shared_pointer, so we can
- use the shared_ptr deleter feature From shared_ptr takes:
- </p>
+ From the point of view of the other threads thread_specific_shared_ptr
+ behaves as a shared_ptr lockup. From the point of view of the current
+ thread the stored pointer is located in a shared_pointer, so we can
+ use the shared_ptr deleter feature From shared_ptr takes:
+ </p>
 <p>
-
+
 </p>
-<pre class="programlisting">
-<span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<pre class="programlisting"><span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
 <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;()</span> <span class="keyword">const</span><span class="special">;</span>
 <span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
 <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">();</span>
@@ -127,24 +118,23 @@
 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">d</span><span class="special">,</span> <span class="identifier">A</span> <span class="identifier">a</span><span class="special">);</span>
 </pre>
 <p>
- </p>
+ </p>
 </dd>
-<dt><span class="term">Why doesn't thread_specific_shared_ptr
- provide a release() function?</span></dt>
+<dt><span class="term">Why doesn't thread_specific_shared_ptr provide a release() function?</span></dt>
 <dd><p>
- As it store a shared_ptr, it cannot give away ownership unless it's
- unique() because the other copy will still destroy the object.
- </p></dd>
+ As it store a shared_ptr, it cannot give away ownership unless it's
+ unique() because the other copy will still destroy the object.
+ </p></dd>
 </dl>
 </div>
-<a name="toward_boost_interthreads.appendices.rationale.thread_specific_storage.comparaing_tsss_and_tss"></a><h5>
-<a name="id5035216"></a>
- <a href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_specific_storage.comparaing_tsss_and_tss">Comparaing
+<a name="toward_boost_interthreads.appendices.rationale.thread_specific_storage.comparaing_tsss_and_tss"></a><h6>
+<a name="id3233334"></a>
+ <a class="link" href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_specific_storage.comparaing_tsss_and_tss">Comparaing
           TSSS and TSS</a>
- </h5>
+ </h6>
 <div class="table">
-<a name="id5035232"></a><p class="title"><b>Table&#160;1.&#160;Comparaing TSSS and TSS</b></p>
-<table class="table" summary="Comparaing TSSS and TSS">
+<a name="toward_boost_interthreads.appendices.rationale.thread_specific_storage.comparaing_tsss_and_tss"></a><p class="title"><b>Table&#160;1.&#160;Comparaing TSSS and TSS</b></p>
+<div class="table-contents"><table class="table" summary="Comparaing TSSS and TSS">
 <colgroup>
 <col>
 <col>
@@ -153,424 +143,423 @@
 </colgroup>
 <thead><tr>
 <th>
- <p>
- Feature
- </p>
- </th>
+ <p>
+ Feature
+ </p>
+ </th>
 <th>
- <p>
- thread_specific_shared_ptr
- </p>
- </th>
+ <p>
+ thread_specific_shared_ptr
+ </p>
+ </th>
 <th>
- <p>
- thread_specific_ptr
- </p>
- </th>
+ <p>
+ thread_specific_ptr
+ </p>
+ </th>
 <th>
- <p>
- Compatible
- </p>
- </th>
+ <p>
+ Compatible
+ </p>
+ </th>
 </tr></thead>
 <tbody>
 <tr>
 <td>
- <p>
- ownership
- </p>
- </td>
+ <p>
+ ownership
+ </p>
+ </td>
 <td>
- <p>
- shared
- </p>
- </td>
+ <p>
+ shared
+ </p>
+ </td>
 <td>
- <p>
- exclusive
- </p>
- </td>
+ <p>
+ exclusive
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- default constructor
- </p>
- </td>
+ <p>
+ default constructor
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- cleanup constructor
- </p>
- </td>
+ <p>
+ cleanup constructor
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>: can not delete the pointer
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>: can not delete the pointer
+ </p>
+ </td>
 <td>
- <p>
- yes:must delete the pointer
- </p>
- </td>
+ <p>
+ yes:must delete the pointer
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">get</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">get</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="keyword">operator</span><span class="special">-&gt;()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">-&gt;()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="keyword">operator</span><span class="special">*()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">*()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">reset</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">T</span><span class="special">*)</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">T</span><span class="special">*)</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*)</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*)</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*,</span><span class="identifier">D</span><span class="special">)</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*,</span><span class="identifier">D</span><span class="special">)</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*,</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">A</span><span class="special">)</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*,</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">A</span><span class="special">)</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">release</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">release</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">get_mutex</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">get_mutex</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">get_map</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">get_map</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">wait_and_get</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">wait_and_get</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 </tbody>
-</table>
+</table></div>
 </div>
+<br class="table-break">
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.rationale.keep_alive"></a><a href="rationale.html#toward_boost_interthreads.appendices.rationale.keep_alive" title="Keep
- Alive">Keep
+<a name="toward_boost_interthreads.appendices.rationale.keep_alive"></a><a class="link" href="rationale.html#toward_boost_interthreads.appendices.rationale.keep_alive" title="Keep Alive">Keep
         Alive</a>
 </h4></div></div></div>
 <div class="variablelist">
 <p class="title"><b></b></p>
 <dl>
-<dt><span class="term">Can a thread that has just do a check
- point be considered as dead less than one second after?</span></dt>
+<dt><span class="term">Can a thread that has just do a check point be considered as dead
+ less than one second after?</span></dt>
 <dd><p>
- Whell this depends on the enabling parameters. If the checking parameter
- is greater than one it could be possible that the thread do a check_point
- just before the keep alive manager do the check, seen that there are
- not enough check_points and declaring the thread dead. If you want
- to avoid this situation let the checkin to 1.
- </p></dd>
+ Whell this depends on the enabling parameters. If the checking parameter
+ is greater than one it could be possible that the thread do a check_point
+ just before the keep alive manager do the check, seen that there
+ are not enough check_points and declaring the thread dead. If you
+ want to avoid this situation let the checkin to 1.
+ </p></dd>
 <dt><span class="term">Nesting enablers and disablers</span></dt>
 <dd><p>
- Enablers/disablers use RAII, so they can be nested and the context
- be restored on the destructor.
- </p></dd>
+ Enablers/disablers use RAII, so they can be nested and the context
+ be restored on the destructor.
+ </p></dd>
 <dt><span class="term">Configurable on dead action</span></dt>
 <dd><p>
- The default action is to abort the process because I don't see any
- generic and cleaner way to manage this event. The library provides
- this hook for user wanting to try something specific.
- </p></dd>
+ The default action is to abort the process because I don't see any
+ generic and cleaner way to manage this event. The library provides
+ this hook for user wanting to try something specific.
+ </p></dd>
 <dt><span class="term">Who control the controler?</span></dt>
 <dd><p>
- There is no way to control this thread other than adding an external
- process.
- </p></dd>
+ There is no way to control this thread other than adding an external
+ process.
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.rationale.thread_tuple"></a><a href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_tuple" title="Thread
- Tuple">Thread
+<a name="toward_boost_interthreads.appendices.rationale.thread_tuple"></a><a class="link" href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_tuple" title="Thread Tuple">Thread
         Tuple</a>
 </h4></div></div></div>
 <div class="variablelist">
@@ -578,43 +567,39 @@
 <dl>
 <dt><span class="term">Why must be not copiable?</span></dt>
 <dd><p>
- Thread tuples can not be copiable since boost::thread is not copiable.
- </p></dd>
+ Thread tuples can not be copiable since boost::thread is not copiable.
+ </p></dd>
 <dt><span class="term">Why should be movable?</span></dt>
 <dd><p>
- If we want functions to return Thread tuples it is necessary to make
- them movable.
- </p></dd>
+ If we want functions to return Thread tuples it is necessary to make
+ them movable.
+ </p></dd>
 <dt><span class="term">Mimic boost::thread_group</span></dt>
 <dd>
 <p>
- thread_tuple has in common some function found in thread_group. From
- it we take
- </p>
+ thread_tuple has in common some function found in thread_group. From
+ it we take
+ </p>
 <p>
-
+
 </p>
-<pre class="programlisting">
-<span class="keyword">void</span> <span class="identifier">join_all</span><span class="special">();</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join_all</span><span class="special">();</span>
 <span class="keyword">void</span> <span class="identifier">interrupt_all</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>
 </pre>
 <p>
- </p>
-<p>
- </p>
+ </p>
 </dd>
 <dt><span class="term">Mimic boost::thread</span></dt>
 <dd>
 <p>
- We can consider a thread tuple as a compound thread, and so we can
- mimic the thread intyerface. From it we takes
- </p>
+ We can consider a thread tuple as a compound thread, and so we can
+ mimic the thread intyerface. From it we takes
+ </p>
 <p>
-
+
 </p>
-<pre class="programlisting">
-<span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
 <span class="keyword">void</span> <span class="identifier">interrupt</span><span class="special">();</span>
 <span class="keyword">void</span> <span class="identifier">detach</span><span class="special">/</span><span class="identifier">detach_all</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>
@@ -622,48 +607,39 @@
 <span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">/</span><span class="identifier">all_joinable</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
 </pre>
 <p>
- </p>
-<p>
- </p>
+ </p>
 </dd>
-<dt><span class="term">Why the user can not modify directly
- the embeeded threads?</span></dt>
+<dt><span class="term">Why the user can not modify directly the embeeded threads?</span></dt>
 <dd>
 <p>
- </p>
-<p>
- The library provides a safe function to get a constant thread reference
- </p>
+ The library provides a safe function to get a constant thread reference
+ </p>
 <p>
-
+
 </p>
-<pre class="programlisting">
-<span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
+<pre class="programlisting"><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
 <p>
- </p>
-<p>
- The problem if we provide the non constant variant is that the user
- can detach them.
- </p>
+ </p>
 <p>
- </p>
+ The problem if we provide the non constant variant is that the user
+ can detach them.
+ </p>
 </dd>
-<dt><span class="term">Joining the first finishing thread
- of a thread tuple</span></dt>
+<dt><span class="term">Joining the first finishing thread of a thread tuple</span></dt>
 <dd><p>
- This functionallity has a price. We need to synchronize all the threads
- transparently, so we need to wrap the user thread functions.
- </p></dd>
+ This functionallity has a price. We need to synchronize all the threads
+ transparently, so we need to wrap the user thread functions.
+ </p></dd>
 </dl>
 </div>
-<a name="toward_boost_interthreads.appendices.rationale.thread_tuple.comparaing_thread__thread_group_and_thread_tuple"></a><h5>
-<a name="id5036636"></a>
- <a href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_tuple.comparaing_thread__thread_group_and_thread_tuple">Comparaing
+<a name="toward_boost_interthreads.appendices.rationale.thread_tuple.comparaing_thread__thread_group_and_thread_tuple"></a><h6>
+<a name="id3234827"></a>
+ <a class="link" href="rationale.html#toward_boost_interthreads.appendices.rationale.thread_tuple.comparaing_thread__thread_group_and_thread_tuple">Comparaing
           thread, thread_group and thread_tuple</a>
- </h5>
+ </h6>
 <div class="table">
-<a name="id5036652"></a><p class="title"><b>Table&#160;2.&#160;Comparaing thread, thread_group and thread_tuple</b></p>
-<table class="table" summary="Comparaing thread, thread_group and thread_tuple">
+<a name="toward_boost_interthreads.appendices.rationale.thread_tuple.comparaing_thread__thread_group_and_thread_tuple"></a><p class="title"><b>Table&#160;2.&#160;Comparaing thread, thread_group and thread_tuple</b></p>
+<div class="table-contents"><table class="table" summary="Comparaing thread, thread_group and thread_tuple">
 <colgroup>
 <col>
 <col>
@@ -673,455 +649,455 @@
 </colgroup>
 <thead><tr>
 <th>
- <p>
- Feature
- </p>
- </th>
+ <p>
+ Feature
+ </p>
+ </th>
 <th>
- <p>
- thread
- </p>
- </th>
+ <p>
+ thread
+ </p>
+ </th>
 <th>
- <p>
- thread_group
- </p>
- </th>
+ <p>
+ thread_group
+ </p>
+ </th>
 <th>
- <p>
- thread_tuple
- </p>
- </th>
+ <p>
+ thread_tuple
+ </p>
+ </th>
 <th>
- <p>
- Compatible
- </p>
- </th>
+ <p>
+ Compatible
+ </p>
+ </th>
 </tr></thead>
 <tbody>
 <tr>
 <td>
- <p>
- default constructor
- </p>
- </td>
+ <p>
+ default constructor
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- copiable
- </p>
- </td>
+ <p>
+ copiable
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- movable
- </p>
- </td>
+ <p>
+ movable
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no*
- </p>
- </td>
+ <p>
+ no*
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no*
- </p>
- </td>
+ <p>
+ no*
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no*
- </p>
- </td>
+ <p>
+ no*
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no*
- </p>
- </td>
+ <p>
+ no*
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">timed_join_all</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">timed_join_all</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no* *
- </p>
- </td>
+ <p>
+ no* *
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">join_first_then_interrupt</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">join_first_then_interrupt</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no* * *
- </p>
- </td>
+ <p>
+ no* * *
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">timed_join_first_then_interrupt</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">timed_join_first_then_interrupt</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no* * *
- </p>
- </td>
+ <p>
+ no* * *
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no
- </p>
- </td>
+ <p>
+ no
+ </p>
+ </td>
 <td>
- <p>
- <span class="bold"><strong>yes</strong></span>
- </p>
- </td>
+ <p>
+ <span class="bold"><strong>yes</strong></span>
+ </p>
+ </td>
 <td>
- <p>
- no*
- </p>
- </td>
+ <p>
+ no*
+ </p>
+ </td>
 </tr>
 </tbody>
-</table>
+</table></div>
 </div>
-<div class="variablelist">
+<br class="table-break"><div class="variablelist">
 <p class="title"><b></b></p>
 <dl>
 <dt><span class="term">*</span></dt>
 <dd><p>
- thread_group could add these synonym functions
- </p></dd>
+ thread_group could add these synonym functions
+ </p></dd>
 <dt><span class="term">* *</span></dt>
 <dd><p>
- thread could add the size function returning 1
- </p></dd>
+ thread could add the size function returning 1
+ </p></dd>
 <dt><span class="term">* * *</span></dt>
 <dd><p>
- thread &amp; thread_group could add these functions
- </p></dd>
+ thread &amp; thread_group could add these functions
+ </p></dd>
 </dl>
 </div>
 </div>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/tests.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/tests.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/tests.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,17 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Appendix
- E: Tests</title>
+<title>Appendix E: Tests</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
 <link rel="up" href="../appendices.html" title="Appendices">
-<link rel="prev" href="acknowledgements.html" title="
- Appendix D: Acknowledgments">
-<link rel="next" href="tickets.html" title=" Appendix
- F: Tickets">
+<link rel="prev" href="acknowledgements.html" title="Appendix D: Acknowledgments">
+<link rel="next" href="tickets.html" title="Appendix F: Tickets">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -26,16 +22,15 @@
 <div class="spirit-nav">
 <a accesskey="p" href="acknowledgements.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tickets.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.appendices.tests"></a><a href="tests.html" title=" Appendix
- E: Tests"> Appendix
+<a name="toward_boost_interthreads.appendices.tests"></a><a class="link" href="tests.html" title="Appendix E: Tests">Appendix
       E: Tests</a>
 </h3></div></div></div>
 <div class="toc"><dl><dt><span class="section">thread_specific_shared_pointer</span></dt></dl></div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.tests.thread_specific_shared_pointer"></a>thread_specific_shared_pointer
+<a name="toward_boost_interthreads.appendices.tests.thread_specific_shared_pointer"></a><a class="link" href="tests.html#toward_boost_interthreads.appendices.tests.thread_specific_shared_pointer" title="thread_specific_shared_pointer">thread_specific_shared_pointer</a>
 </h4></div></div></div>
 <div class="informaltable"><table class="table">
 <colgroup></colgroup>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/tickets.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/tickets.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/tickets.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,17 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Appendix
- F: Tickets</title>
+<title>Appendix F: Tickets</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
 <link rel="up" href="../appendices.html" title="Appendices">
-<link rel="prev" href="tests.html" title=" Appendix
- E: Tests">
-<link rel="next" href="todo.html" title=" Appendix
- G: Future plans">
+<link rel="prev" href="tests.html" title="Appendix E: Tests">
+<link rel="next" href="todo.html" title="Appendix G: Future plans">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -26,10 +22,9 @@
 <div class="spirit-nav">
 <a accesskey="p" href="tests.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.appendices.tickets"></a><a href="tickets.html" title=" Appendix
- F: Tickets"> Appendix
+<a name="toward_boost_interthreads.appendices.tickets"></a><a class="link" href="tickets.html" title="Appendix F: Tickets">Appendix
       F: Tickets</a>
 </h3></div></div></div>
 <div class="informaltable"><table class="table">
@@ -44,228 +39,228 @@
 </colgroup>
 <thead><tr>
 <th>
- <p>
- Kind
- </p>
+ <p>
+ Kind
+ </p>
               </th>
 <th>
- <p>
- Identifier
- </p>
+ <p>
+ Identifier
+ </p>
               </th>
 <th>
- <p>
- Description
- </p>
+ <p>
+ Description
+ </p>
               </th>
 <th>
- <p>
- Resolution
- </p>
+ <p>
+ Resolution
+ </p>
               </th>
 <th>
- <p>
- State
- </p>
+ <p>
+ State
+ </p>
               </th>
 <th>
- <p>
- Tests
- </p>
+ <p>
+ Tests
+ </p>
               </th>
 <th>
- <p>
- Version
- </p>
+ <p>
+ Version
+ </p>
               </th>
 </tr></thead>
 <tbody>
 <tr>
 <td>
- <p>
- bug
- </p>
+ <p>
+ bug
+ </p>
               </td>
 <td>
- <p>
- v0.1#1
- </p>
+ <p>
+ v0.1#1
+ </p>
               </td>
 <td>
- <p>
- basic_keep_alive example do not link
- </p>
+ <p>
+ basic_keep_alive example do not link
+ </p>
               </td>
 <td>
- <p>
- Add to the link
- </p>
+ <p>
+ Add to the link
+ </p>
               </td>
 <td>
- <p>
- Closed
- </p>
+ <p>
+ Closed
+ </p>
               </td>
 <td>
- <p>
- See basic_keep_alive.cpp example
- </p>
+ <p>
+ See basic_keep_alive.cpp example
+ </p>
               </td>
 <td>
- <p>
- v0.2
- </p>
+ <p>
+ v0.2
+ </p>
               </td>
 </tr>
 <tr>
 <td>
- <p>
- bug
- </p>
+ <p>
+ bug
+ </p>
               </td>
 <td>
- <p>
- v0.1.1#1
- </p>
+ <p>
+ v0.1.1#1
+ </p>
               </td>
 <td>
- <p>
- keep alive mechanism crash when setting set_on_dead_thread before
- enabling the mechanism
- </p>
+ <p>
+ keep alive mechanism crash when setting set_on_dead_thread before
+ enabling the mechanism
+ </p>
               </td>
 <td>
- <p>
- This was due to the fact that there were no default data for the
- backup.
- </p>
+ <p>
+ This was due to the fact that there were no default data for the
+ backup.
+ </p>
               </td>
 <td>
- <p>
- Closed
- </p>
+ <p>
+ Closed
+ </p>
               </td>
 <td>
- <p>
- See basic_keep_alive.cpp example
- </p>
+ <p>
+ See basic_keep_alive.cpp example
+ </p>
               </td>
 <td>
- <p>
- v0.4
- </p>
+ <p>
+ v0.4
+ </p>
               </td>
 </tr>
 <tr>
 <td>
- <p>
- bug
- </p>
+ <p>
+ bug
+ </p>
               </td>
 <td>
- <p>
- v0.1.1#2
- </p>
+ <p>
+ v0.1.1#2
+ </p>
               </td>
 <td>
- <p>
- keep alive mechanism do not detect dead threads
- </p>
+ <p>
+ keep alive mechanism do not detect dead threads
+ </p>
               </td>
 <td>
- <p>
- We need to reset the counters only when the period is 0.
- </p>
+ <p>
+ We need to reset the counters only when the period is 0.
+ </p>
               </td>
 <td>
- <p>
- Closed
- </p>
+ <p>
+ Closed
+ </p>
               </td>
 <td>
- <p>
- See basic_keep_alive.cpp example
- </p>
+ <p>
+ See basic_keep_alive.cpp example
+ </p>
               </td>
 <td>
- <p>
- v0.4
- </p>
+ <p>
+ v0.4
+ </p>
               </td>
 </tr>
 <tr>
 <td>
- <p>
- bug
- </p>
+ <p>
+ bug
+ </p>
               </td>
 <td>
- <p>
- v0.1.1#3
- </p>
+ <p>
+ v0.1.1#3
+ </p>
               </td>
 <td>
- <p>
- The set_on_dead_thread setting is not recovered by embeeding enablers/disablers
- </p>
+ <p>
+ The set_on_dead_thread setting is not recovered by embeeding enablers/disablers
+ </p>
               </td>
 <td>
- <p>
- The problem is that the on_dead and th thread pointer were stored
- on the backup. It is enough to store them on the
- </p>
+ <p>
+ The problem is that the on_dead and th thread pointer were stored
+ on the backup. It is enough to store them on the
+ </p>
               </td>
 <td>
- <p>
- Closed
- </p>
+ <p>
+ Closed
+ </p>
               </td>
 <td>
- <p>
- See basic_keep_alive.cpp example
- </p>
+ <p>
+ See basic_keep_alive.cpp example
+ </p>
               </td>
 <td>
- <p>
- v0.4
- </p>
+ <p>
+ v0.4
+ </p>
               </td>
 </tr>
 <tr>
 <td>
- <p>
- bug
- </p>
+ <p>
+ bug
+ </p>
               </td>
 <td>
- <p>
- v0.2.0#1
- </p>
+ <p>
+ v0.2.0#1
+ </p>
               </td>
 <td>
- <p>
- xxx
- </p>
+ <p>
+ xxx
+ </p>
               </td>
 <td>
- <p>
- xx
- </p>
+ <p>
+ xx
+ </p>
               </td>
 <td>
- <p>
- Open
- </p>
+ <p>
+ Open
+ </p>
               </td>
 <td>
- <p>
- xxx
- </p>
+ <p>
+ xxx
+ </p>
               </td>
 <td>
- <p>
- v0.4.1
- </p>
+ <p>
+ v0.4.1
+ </p>
               </td>
 </tr>
 </tbody>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/todo.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/todo.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/appendices/todo.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,15 +1,12 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Appendix
- G: Future plans</title>
+<title>Appendix G: Future plans</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
 <link rel="up" href="../appendices.html" title="Appendices">
-<link rel="prev" href="tickets.html" title=" Appendix
- F: Tickets">
+<link rel="prev" href="tickets.html" title="Appendix F: Tickets">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -24,11 +21,10 @@
 <div class="spirit-nav">
 <a accesskey="p" href="tickets.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.appendices.todo"></a><a href="todo.html" title=" Appendix
- G: Future plans"> Appendix
- G: Future plans</a>
+<a name="toward_boost_interthreads.appendices.todo"></a><a class="link" href="todo.html" title="Appendix G: Future plans">Appendix G:
+ Future plans</a>
 </h3></div></div></div>
 <div class="toc"><dl>
 <dt><span class="section"><a href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review">Tasks
@@ -36,100 +32,99 @@
 <dt><span class="section"><a href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases">For
         later releases</a></span></dt>
 </dl></div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review"></a><a href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review" title="Tasks
- to do before review">Tasks
+<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review"></a><a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review" title="Tasks to do before review">Tasks
         to do before review</a>
 </h4></div></div></div>
-<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.complete_the_tests"></a><h5>
-<a name="id5038397"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.complete_the_tests">Complete
+<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.complete_the_tests"></a><h6>
+<a name="id3236864"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.complete_the_tests">Complete
           the tests</a>
- </h5>
+ </h6>
 <p>
           Even if the current release include some test there is yet a long way before
           been able to review the library.]]
         </p>
-<div class="itemizedlist"><ul type="disc">
-<li>
- change the test so they take less time using locks; conditions and variables.
- </li>
-<li>
- Add test with functions throwing
- </li>
-<li>
- Formalize the tests for thread_decoratoor
- </li>
-<li>
- Formalize the tests for thread_specific_shared_ptr
- </li>
-<li>
- Add tests for keep alive mechanism
- </li>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ change the test so they take less time using locks; conditions and
+ variables.
+ </li>
+<li class="listitem">
+ Add test with functions throwing
+ </li>
+<li class="listitem">
+ Formalize the tests for thread_decoratoor
+ </li>
+<li class="listitem">
+ Formalize the tests for thread_specific_shared_ptr
+ </li>
+<li class="listitem">
+ Add tests for keep alive mechanism
+ </li>
 </ul></div>
-<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.add_more_examples"></a><h5>
-<a name="id5038453"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.add_more_examples">Add
+<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.add_more_examples"></a><h6>
+<a name="id3236937"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.add_more_examples">Add
           more examples</a>
- </h5>
-<div class="itemizedlist"><ul type="disc">
-<li>
- Complete the STM example.
- </li>
-<li>
- Change the implementation of the file on the async_ostream.
- </li>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ Complete the STM example.
+ </li>
+<li class="listitem">
+ Change the implementation of the file on the async_ostream.
+ </li>
 </ul></div>
-<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.change_the_rational_and_implementation_sections"></a><h5>
-<a name="id5038490"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.change_the_rational_and_implementation_sections">Change
+<a name="toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.change_the_rational_and_implementation_sections"></a><h6>
+<a name="id3236980"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.tasks_to_do_before_review.change_the_rational_and_implementation_sections">Change
           the rational and implementation sections</a>
- </h5>
+ </h6>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.appendices.todo.for_later_releases"></a><a href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases" title="For
- later releases">For
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases"></a><a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases" title="For later releases">For
         later releases</a>
 </h4></div></div></div>
-<a name="toward_boost_interthreads.appendices.todo.for_later_releases.add_c__0x_move_semantics_on_compilers_supporting_it_and_use_the_boost_move_emulation_otherwise"></a><h5>
-<a name="id5038532"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.add_c__0x_move_semantics_on_compilers_supporting_it_and_use_the_boost_move_emulation_otherwise">Add
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.add_c__0x_move_semantics_on_compilers_supporting_it_and_use_the_boost_move_emulation_otherwise"></a><h6>
+<a name="id3237022"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.add_c__0x_move_semantics_on_compilers_supporting_it_and_use_the_boost_move_emulation_otherwise">Add
           C++0x move semantics on compilers supporting it and use the Boost.Move
           emulation otherwise</a>
- </h5>
-<a name="toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_variadic_templates_on_compilers_supporting_it_and_use_the_preprocesor_otherwise"></a><h5>
-<a name="id5038563"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_variadic_templates_on_compilers_supporting_it_and_use_the_preprocesor_otherwise">Use
+ </h6>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_variadic_templates_on_compilers_supporting_it_and_use_the_preprocesor_otherwise"></a><h6>
+<a name="id3237052"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_variadic_templates_on_compilers_supporting_it_and_use_the_preprocesor_otherwise">Use
           C++0x variadic templates on compilers supporting it and use the preprocesor
           otherwise</a>
- </h5>
-<a name="toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_concepts_on_compilers_supporting_them_and_use_the_boost_conceptcheck_or_boost_concepttraits_otherwise"></a><h5>
-<a name="id5038593"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_concepts_on_compilers_supporting_them_and_use_the_boost_conceptcheck_or_boost_concepttraits_otherwise">Use
+ </h6>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_concepts_on_compilers_supporting_them_and_use_the_boost_conceptcheck_or_boost_concepttraits_otherwise"></a><h6>
+<a name="id3237082"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.use_c__0x_concepts_on_compilers_supporting_them_and_use_the_boost_conceptcheck_or_boost_concepttraits_otherwise">Use
           C++0x Concepts on compilers supporting them and use the Boost.ConceptCheck
           or Boost.ConceptTraits otherwise</a>
- </h5>
-<a name="toward_boost_interthreads.appendices.todo.for_later_releases.add_a_daemon_controlling_all_the_keep_alive_controller_threads"></a><h5>
-<a name="id5038624"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.add_a_daemon_controlling_all_the_keep_alive_controller_threads">Add
+ </h6>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.add_a_daemon_controlling_all_the_keep_alive_controller_threads"></a><h6>
+<a name="id3237113"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.add_a_daemon_controlling_all_the_keep_alive_controller_threads">Add
           a daemon controlling all the keep alive controller threads</a>
- </h5>
+ </h6>
 <p>
           This daemon will send regular keep_alive messages and kill the process
           when dead.
         </p>
-<a name="toward_boost_interthreads.appendices.todo.for_later_releases.optimize_the_tsss_maps_using_intrusive_containers"></a><h5>
-<a name="id5038660"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.optimize_the_tsss_maps_using_intrusive_containers">Optimize
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.optimize_the_tsss_maps_using_intrusive_containers"></a><h6>
+<a name="id3237150"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.optimize_the_tsss_maps_using_intrusive_containers">Optimize
           the TSSS maps using intrusive containers</a>
- </h5>
-<a name="toward_boost_interthreads.appendices.todo.for_later_releases.generalize_both_specific_pointers_in_a_template_class_basic_thread_specific_ptr"></a><h5>
-<a name="id5038683"></a>
- <a href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.generalize_both_specific_pointers_in_a_template_class_basic_thread_specific_ptr">Generalize
+ </h6>
+<a name="toward_boost_interthreads.appendices.todo.for_later_releases.generalize_both_specific_pointers_in_a_template_class_basic_thread_specific_ptr"></a><h6>
+<a name="id3237172"></a>
+ <a class="link" href="todo.html#toward_boost_interthreads.appendices.todo.for_later_releases.generalize_both_specific_pointers_in_a_template_class_basic_thread_specific_ptr">Generalize
           both specific pointers in a template class basic_thread_specific_ptr</a>
- </h5>
+ </h6>
 <p>
           <span class="bold"><strong>Domain Features</strong></span>
         </p>
@@ -138,25 +133,25 @@
 <dl>
 <dt><span class="term">ownership: exclusive/shared</span></dt>
 <dd><p>
- Specifies if the pointer is exclusive to the thread or shared with
- other threads.
- </p></dd>
+ Specifies if the pointer is exclusive to the thread or shared with
+ other threads.
+ </p></dd>
 <dt><span class="term">key range: fixed/variable/mixed </span></dt>
 <dd><p>
- Specifies how the key range is defined. fixed has an integer range
- 0..n, variable takes as key the address of the specific_ptr and mixed
- use a variant of fixed or variable key.
- </p></dd>
+ Specifies how the key range is defined. fixed has an integer range
+ 0..n, variable takes as key the address of the specific_ptr and mixed
+ use a variant of fixed or variable key.
+ </p></dd>
 <dt><span class="term">key creation: eager/lazy</span></dt>
 <dd><p>
- Specifies how the key is created, eager at construction time, lazy
- when needed.
- </p></dd>
+ Specifies how the key is created, eager at construction time, lazy
+ when needed.
+ </p></dd>
 <dt><span class="term">context setting: eager/lazy</span></dt>
 <dd><p>
- Specifies how the pointer is set, eager at thread initialization time,
- lazy when needed.
- </p></dd>
+ Specifies how the pointer is set, eager at thread initialization
+ time, lazy when needed.
+ </p></dd>
 </dl>
 </div>
 <p>
@@ -164,16 +159,14 @@
           is exclusive, has a variable key range and so the key is initialized at
           construction time and explicit context setting by user on the current thread.
         </p>
-<pre class="programlisting">
-<span class="keyword">typedef</span> <span class="identifier">basic_thread_specific_ptr</span><span class="special">&lt;</span><span class="identifier">exclusive</span><span class="special">,</span> <span class="identifier">variable_key_range</span><span class="special">&lt;&gt;,</span> <span class="identifier">eager_context_setting</span><span class="special">&gt;</span> <span class="identifier">thread_specific_ptr</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">basic_thread_specific_ptr</span><span class="special">&lt;</span><span class="identifier">exclusive</span><span class="special">,</span> <span class="identifier">variable_key_range</span><span class="special">&lt;&gt;,</span> <span class="identifier">eager_context_setting</span><span class="special">&gt;</span> <span class="identifier">thread_specific_ptr</span><span class="special">;</span>
 </pre>
 <p>
           The current <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span></code>
           is shared, has a variable key range and so the key is initialized at construction
           time and explicit context setting by user on the current thread.
         </p>
-<pre class="programlisting">
-<span class="keyword">typedef</span> <span class="identifier">basic_thread_specific_ptr</span><span class="special">&lt;</span><span class="identifier">exclusive</span><span class="special">,</span> <span class="identifier">variable_key_range</span><span class="special">&lt;&gt;,</span> <span class="identifier">eager_context_setting</span><span class="special">&gt;</span> <span class="identifier">thread_specific_ptr</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">basic_thread_specific_ptr</span><span class="special">&lt;</span><span class="identifier">exclusive</span><span class="special">,</span> <span class="identifier">variable_key_range</span><span class="special">&lt;&gt;,</span> <span class="identifier">eager_context_setting</span><span class="special">&gt;</span> <span class="identifier">thread_specific_ptr</span><span class="special">;</span>
 </pre>
 <p>
           <span class="bold"><strong>Design rationale</strong></span>
@@ -214,14 +207,12 @@
           starts this is a no issue. The second is safe but has as consequence that
           every access include a check. In addition the type must be default constructible.
         </p>
-<pre class="programlisting">
-<span class="identifier">bith</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;</span><span class="identifier">myclass</span><span class="special">,</span> <span class="identifier">lazy_setting</span><span class="special">&gt;</span> <span class="identifier">ptr</span><span class="special">;</span>
+<pre class="programlisting"><span class="identifier">bith</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;</span><span class="identifier">myclass</span><span class="special">,</span> <span class="identifier">lazy_setting</span><span class="special">&gt;</span> <span class="identifier">ptr</span><span class="special">;</span>
 </pre>
 <p>
           The pointer will be initilaized when needed as if we had do
         </p>
-<pre class="programlisting">
-<span class="keyword">if</span> <span class="special">(</span><span class="identifier">ptr</span><span class="special">.</span><span class="identifier">get</span><span class="special">()==</span><span class="number">0</span><span class="special">)</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">if</span> <span class="special">(</span><span class="identifier">ptr</span><span class="special">.</span><span class="identifier">get</span><span class="special">()==</span><span class="number">0</span><span class="special">)</span> <span class="special">{</span>
     <span class="identifier">ptr</span><span class="special">.</span><span class="identifier">reset</span><span class="special">(</span> <span class="keyword">new</span> <span class="identifier">myclass</span><span class="special">()</span> <span class="special">);</span>
 <span class="special">}</span>
 </pre>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/examples.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/examples.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/examples.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,16 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
 <title>Examples</title>
-<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="prev" href="reference/thread_group_once_hpp.html" title="
- Header &lt;boost/interthreads/thread_group_once.hpp&gt;">
-<link rel="next" href="examples/thread_safe_deferred_traces.html" title="Thread
- safe deferred traces">
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="up" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="prev" href="reference.html" title="Reference">
+<link rel="next" href="appendices.html" title="Appendices">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -23,24 +20,321 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="reference/thread_group_once_hpp.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="examples/thread_safe_deferred_traces.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="toward_boost_interthreads.examples"></a>Examples
+<a name="toward_boost_interthreads.examples"></a><a class="link" href="examples.html" title="Examples">Examples</a>
 </h2></div></div></div>
-<div class="toc"><dl><dt><span class="section"><a href="examples/thread_safe_deferred_traces.html">Thread
+<div class="toc"><dl><dt><span class="section"><a href="examples.html#toward_boost_interthreads.examples.thread_safe_deferred_traces">Thread
       safe deferred traces</a></span></dt></dl></div>
 <p>
       This section do includes complete examples using the library.
     </p>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.examples.thread_safe_deferred_traces"></a><a class="link" href="examples.html#toward_boost_interthreads.examples.thread_safe_deferred_traces" title="Thread safe deferred traces">Thread
+ safe deferred traces</a>
+</h3></div></div></div>
+<p>
+ When executing on a multi thread environment, the output lines on std::cout
+ could interleave. We can synchronize these outputs with a global mutex
+ </p>
+<pre class="programlisting"><span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">lock_guard</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">lock</span><span class="special">(</span><span class="identifier">global_cout_mutex</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="special">...</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> <span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ This mutex could be the bottleneck of the system. Only one mutex resource
+ for all the user threads.
+ </p>
+<pre class="programlisting">U U
+ /
+ /
+ U ----- R ----- U
+ |
+ |
+ U
+</pre>
+<p>
+ Another approach could be using a queue of output stream buffers for each
+ thread. Each buffer is timestamped with the creation date and there is a
+ concentrator that takes one by one the elements ordered by their timestamp.
+ Only the current thread can push on this queue because it is specific to
+ the thread. There is a single thread, the concentrator, that pops from these
+ queue. In this context we can ensure thread safety without locking as far
+ as the queue has at least two messages.
+ </p>
+<pre class="programlisting">U ----- R ------+
+ \
+ U ----- R ------\
+ \
+ U ----- R -------- C
+ / /
+ U ----- R ------/ /
+ /
+ U ----- R ------+
+</pre>
+<p>
+ This can be encapsulated in an async_ostream class
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">async_ostream</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">stream</span><span class="special">&lt;</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">async_ostream_sink</span><span class="special">&gt;</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="keyword">char</span> <span class="identifier">char_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">sink_tag</span> <span class="identifier">category</span><span class="special">;</span>
+
+ <span class="identifier">async_ostream</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">flush</span><span class="special">();</span>
+<span class="special">};</span>
+
+<span class="keyword">extern</span> <span class="identifier">async_ostream</span> <span class="identifier">cout_</span><span class="special">;</span>
+</pre>
+<p>
+ With this interface the user can use cout_ as it used std::cout.
+ </p>
+<pre class="programlisting"><span class="identifier">cout_</span> <span class="special">&lt;&lt;</span> <span class="string">"Hello World!"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> <span class="special">;</span>
+</pre>
+<p>
+ All the magic is in the <code class="computeroutput"><span class="keyword">template</span> <span class="keyword">class</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">stream</span><span class="special">&lt;&gt;</span></code>. The parameter must be a model of
+ a sink (See Boost.Iostreams). Here it is.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">detail</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">async_ostream_sink</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">char</span> <span class="identifier">char_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">sink_tag</span> <span class="identifier">category</span><span class="special">;</span>
+ <span class="identifier">async_ostream_sink</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">flush</span><span class="special">();</span>
+ <span class="keyword">private</span><span class="special">:</span>
+ <span class="keyword">friend</span> <span class="keyword">class</span> <span class="identifier">async_ostream_concentrator</span><span class="special">;</span>
+ <span class="keyword">friend</span> <span class="keyword">class</span> <span class="identifier">async_ostream</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">impl</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">impl</span><span class="special">&gt;</span> <span class="identifier">impl_</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ This class declares the just minimum in order to model a sink. In addition,
+ in order to mask the implementation, the Pimpl idiom is used. The implementation
+ of these functions is straigtforward:
+ </p>
+<pre class="programlisting"><span class="identifier">async_ostream</span><span class="special">::</span><span class="identifier">async_ostream</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">)</span>
+ <span class="special">:</span> <span class="identifier">base_type</span><span class="special">(</span><span class="identifier">os</span><span class="special">)</span> <span class="special">{}</span>
+
+<span class="keyword">void</span> <span class="identifier">async_ostream</span><span class="special">::</span><span class="identifier">flush</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">base_type</span><span class="special">::</span><span class="identifier">flush</span><span class="special">();</span>
+ <span class="identifier">async_ostream</span><span class="special">&amp;</span> <span class="identifier">d</span> <span class="special">=</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span>
+ <span class="identifier">d</span><span class="special">-&gt;</span><span class="identifier">flush</span><span class="special">();</span>
+<span class="special">}</span>
+
+<span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">async_ostream_sink</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">)</span>
+ <span class="special">:</span> <span class="identifier">impl_</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">(</span><span class="identifier">os</span><span class="special">))</span> <span class="special">{}</span>
+
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">impl_</span><span class="special">-&gt;</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span><span class="identifier">n</span><span class="special">);</span>
+<span class="special">}</span>
+
+<span class="keyword">void</span> <span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">flush</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">impl_</span><span class="special">-&gt;</span><span class="identifier">flush</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Let me continue with the handle of the Pimpl pattern:
+ </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span> <span class="special">{</span>
+ <span class="identifier">impl</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os_</span><span class="special">;</span>
+ <span class="identifier">tsss_type</span> <span class="identifier">tsss_</span><span class="special">;</span>
+ <span class="identifier">priority_queue_type</span> <span class="identifier">queue_</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">thread_</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">);</span>
+
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">terminate</span><span class="special">(</span><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">async_ostream_thread_ctx</span><span class="special">&gt;</span> <span class="identifier">that</span><span class="special">);</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">loop</span><span class="special">(</span><span class="identifier">impl</span><span class="special">*</span> <span class="identifier">that</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+<p>
+ Of course we need to store a reference to the final ostream.
+ </p>
+<p>
+ The <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span>
+ <span class="identifier">tsss_</span></code> is used to encapsulate the
+ logic specific to each thread.
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;</span><span class="identifier">async_ostream_thread_ctx</span><span class="special">&gt;</span> <span class="identifier">tsss_type</span><span class="special">;</span>
+</pre>
+<p>
+ A priority queue <code class="computeroutput"><span class="identifier">queue_</span></code> will
+ be used by the concentrator thread to order the stringstreams by date.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">timestamped</span> <span class="special">{</span>
+ <span class="identifier">system_time</span> <span class="identifier">date_</span><span class="special">;</span>
+ <span class="keyword">unsigned</span> <span class="identifier">seq_</span><span class="special">;</span>
+ <span class="identifier">T</span> <span class="identifier">value_</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">reset_date</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">seq</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">date_</span> <span class="special">=</span> <span class="identifier">system_time</span><span class="special">();</span>
+ <span class="identifier">seq_</span> <span class="special">=</span> <span class="identifier">seq</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_comparator_gt</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">timestamped</span><span class="special">*</span> <span class="identifier">value_type</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">value_type</span><span class="special">&amp;</span><span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="special">(</span><span class="identifier">lhs</span><span class="special">-&gt;</span><span class="identifier">date_</span> <span class="special">&gt;</span> <span class="identifier">rhs</span><span class="special">-&gt;</span><span class="identifier">date_</span><span class="special">)</span> <span class="special">?</span> <span class="keyword">true</span> <span class="special">:</span>
+ <span class="special">(</span><span class="identifier">lhs</span><span class="special">-&gt;</span><span class="identifier">date_</span> <span class="special">==</span> <span class="identifier">rhs</span><span class="special">-&gt;</span><span class="identifier">date_</span><span class="special">)</span> <span class="special">&amp;&amp;</span> <span class="special">(</span><span class="identifier">lhs</span><span class="special">-&gt;</span><span class="identifier">seq_</span> <span class="special">&gt;</span> <span class="identifier">rhs</span><span class="special">-&gt;</span><span class="identifier">seq_</span><span class="special">)?</span> <span class="keyword">true</span><span class="special">:</span><span class="keyword">false</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+<span class="special">};</span>
+
+<span class="keyword">typedef</span> <span class="identifier">timestamped</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span><span class="special">&gt;</span> <span class="identifier">element_type</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">priority_queue</span><span class="special">&lt;</span><span class="identifier">queue_type</span><span class="special">*,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span><span class="identifier">element_type</span><span class="special">*&gt;,</span> <span class="identifier">element_type</span><span class="special">::</span><span class="identifier">ptr_comparator_gt</span><span class="special">&gt;</span> <span class="identifier">priority_queue_type</span><span class="special">;</span>
+</pre>
+<p>
+ In addition to the timestamp <code class="computeroutput"><span class="identifier">date_</span></code>
+ we need a sequence number to order the stringstreams pushed without enough
+ time granularity, e.g. on the same microsecond.
+ </p>
+<p>
+ To finish the field declaration there is the concentrator thread implemented
+ by the loop function.
+ </p>
+<pre class="programlisting"><span class="special">,</span> <span class="identifier">thread_</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span><span class="identifier">loop</span><span class="special">,</span> <span class="keyword">this</span><span class="special">))</span>
+</pre>
+<p>
+ Comming back to the sink implementation,
+ </p>
+<pre class="programlisting"><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">impl</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">)</span>
+<span class="special">:</span> <span class="identifier">os_</span><span class="special">(</span><span class="identifier">os</span><span class="special">)</span>
+<span class="special">,</span> <span class="identifier">tsss_</span><span class="special">(</span><span class="identifier">terminate</span><span class="special">)</span>
+<span class="special">,</span> <span class="identifier">thread_</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span><span class="identifier">loop</span><span class="special">,</span> <span class="keyword">this</span><span class="special">))</span>
+<span class="special">{}</span>
+</pre>
+<p>
+ The terminate cleanup function is used to ensure that the queue is empty
+ before the thread finishes. To avoid optimizations a non const call inc is
+ done while waiting the queue empties.
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">(</span><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">async_ostream_thread_ctx</span><span class="special">&gt;</span> <span class="identifier">that</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">while</span> <span class="special">(!</span><span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">empty</span><span class="special">())</span> <span class="special">{</span>
+ <span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">inc</span><span class="special">();</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The central sink function is write. Here instead to lock a mutex the function
+ forwards to the thread specific shared pointer. We will see below how <code class="computeroutput"><span class="identifier">async_ostream_thread_ctx</span></code> handles this call.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">tsss_</span><span class="special">-&gt;</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">n</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ It is time to analyze the thread specific context before seeing how the concentrator
+ is implemented.
+ </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">async_ostream_thread_ctx</span> <span class="special">{</span>
+ <span class="identifier">async_ostream_thread_ctx</span><span class="special">();</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">flush</span><span class="special">();</span>
+ <span class="identifier">element_type</span><span class="special">*</span> <span class="identifier">get</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">queue_</span><span class="special">.</span><span class="identifier">empty</span><span class="special">();}</span>
+ <span class="keyword">void</span> <span class="identifier">inc</span><span class="special">()</span> <span class="special">{++</span><span class="identifier">inc_</span><span class="special">;}</span>
+<span class="keyword">private</span><span class="special">:</span>
+ <span class="keyword">unsigned</span> <span class="identifier">seq_</span><span class="special">;</span>
+ <span class="identifier">element_type</span> <span class="special">*</span><span class="identifier">current_</span><span class="special">;</span>
+ <span class="identifier">queue_type</span> <span class="identifier">queue_</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span> <span class="identifier">mutex_</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span><span class="special">&amp;</span> <span class="identifier">buffer</span><span class="special">()</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">current_</span><span class="special">-&gt;</span><span class="identifier">value_</span><span class="special">;}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ Each thread has a pointer to the current timestamped stringstream wich is
+ used for the current output flow, i.e. by the write function.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">buffer</span><span class="special">().</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">n</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">n</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Once the user does a flush, the current element is pushed on the queue. The
+ <code class="computeroutput"><span class="identifier">sec_</span></code> integer is used as monotonic
+ sequence in conjuntion with the timestamp.
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">flush</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">current_</span><span class="special">-&gt;</span><span class="identifier">reset_date</span><span class="special">(</span><span class="identifier">seq_</span><span class="special">);</span>
+ <span class="special">++</span><span class="identifier">seq_</span><span class="special">;</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">size</span><span class="special">()&gt;</span><span class="number">2</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">queue_</span><span class="special">.</span><span class="identifier">push</span><span class="special">(</span><span class="identifier">current_</span><span class="special">);</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">lock_guard</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">lock</span><span class="special">(</span><span class="identifier">mutex_</span><span class="special">);</span>
+ <span class="identifier">queue_</span><span class="special">.</span><span class="identifier">push</span><span class="special">(</span><span class="identifier">current_</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="identifier">current_</span> <span class="special">=</span> <span class="keyword">new</span> <span class="identifier">element_type</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+<p>
+ As stated in the introduction, we don't need to lock the mutex if the number
+ of elements in the queue is enough.
+ </p>
+<p>
+ These queue elements will be read by the concentrator using the get function.
+ </p>
+<pre class="programlisting"><span class="identifier">element_type</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">size</span><span class="special">()&gt;</span><span class="number">1</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">get_i</span><span class="special">();</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">lock_guard</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">lock</span><span class="special">(</span><span class="identifier">mutex_</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">get_i</span><span class="special">();</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+
+<span class="identifier">element_type</span><span class="special">*</span> <span class="identifier">get_i</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">empty</span><span class="special">())</span> <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">element_type</span><span class="special">*</span> <span class="identifier">e</span><span class="special">=</span> <span class="identifier">queue_</span><span class="special">.</span><span class="identifier">front</span><span class="special">();</span>
+ <span class="identifier">queue_</span><span class="special">.</span><span class="identifier">pop</span><span class="special">();</span>
+ <span class="keyword">return</span> <span class="identifier">e</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The concentrator loop looks like:
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">async_ostream_sink_impl</span><span class="special">::</span><span class="identifier">loop</span><span class="special">(</span><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">*</span> <span class="identifier">that</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os_</span> <span class="special">=</span> <span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">os_</span><span class="special">;</span>
+ <span class="keyword">for</span><span class="special">(;;)</span> <span class="special">{</span>
+ <span class="comment">// sleeps a little bit
+</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">posix_time</span><span class="special">::</span><span class="identifier">milliseconds</span><span class="special">(</span><span class="number">1</span><span class="special">));</span>
+ <span class="special">{</span> <span class="comment">// scope needed don't remove
+</span> <span class="comment">// lock the map access
+</span> <span class="identifier">tsss_type</span><span class="special">::</span><span class="identifier">lock_type</span> <span class="identifier">lock</span><span class="special">(</span><span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">tsss_</span><span class="special">.</span><span class="identifier">get_mutex</span><span class="special">());</span>
+ <span class="keyword">const</span> <span class="identifier">tsss_type</span><span class="special">::</span><span class="identifier">map_type</span><span class="special">&amp;</span> <span class="identifier">tmap</span><span class="special">(</span><span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">tsss_</span><span class="special">.</span><span class="identifier">get_map</span><span class="special">(</span><span class="identifier">lock</span><span class="special">));</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">tsss_type</span><span class="special">::</span><span class="identifier">map_type</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">tmap</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">tmap</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span> <span class="special">++</span><span class="identifier">it</span><span class="special">)</span> <span class="special">{</span>
+ <span class="comment">// takes the first element of each thread queue (if it exists) and push it on the ordered queue.
+</span> <span class="identifier">element_type</span><span class="special">*</span> <span class="identifier">e</span><span class="special">=</span> <span class="identifier">it</span><span class="special">-&gt;</span><span class="identifier">second</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">();</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">e</span> <span class="special">!=</span> <span class="number">0</span><span class="special">)</span> <span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">push</span><span class="special">(</span><span class="identifier">e</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">empty</span><span class="special">())</span> <span class="special">{</span> <span class="comment">//when the queue is empty sleeps a little more
+</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">posix_time</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="special">}</span> <span class="keyword">else</span> <span class="special">{</span>
+ <span class="comment">// takes the fist element of the ordered queue, write them on the output stream and delete it.
+</span> <span class="identifier">element_type</span><span class="special">*</span> <span class="identifier">e</span> <span class="special">=</span> <span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">top</span><span class="special">();</span>
+ <span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">pop</span><span class="special">();</span>
+ <span class="identifier">os_</span> <span class="special">&lt;&lt;</span> <span class="string">"["</span><span class="special">&lt;&lt;</span> <span class="identifier">e</span><span class="special">-&gt;</span><span class="identifier">date_</span> <span class="special">&lt;&lt;</span><span class="string">"-"</span> <span class="special">&lt;&lt;</span> <span class="identifier">e</span><span class="special">-&gt;</span><span class="identifier">seq_</span> <span class="special">&lt;&lt;</span> <span class="string">"] "</span> <span class="special">&lt;&lt;</span> <span class="identifier">e</span><span class="special">-&gt;</span><span class="identifier">value_</span><span class="special">.</span><span class="identifier">str</span><span class="special">();</span>
+ <span class="keyword">delete</span> <span class="identifier">e</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+</div>
 <p>
       /
     </p>
 </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; 2008 -2009 Vicente J. Botet Escriba<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2008 -2009,2011 Vicente J. Botet Escriba<p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
         file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       </p>
@@ -48,7 +342,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="reference/thread_group_once_hpp.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="examples/thread_safe_deferred_traces.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/examples/thread_safe_deferred_traces.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/examples/thread_safe_deferred_traces.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/examples/thread_safe_deferred_traces.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,12 +1,10 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Thread
- safe deferred traces</title>
+<title>Thread safe deferred traces</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
 <link rel="up" href="../examples.html" title="Examples">
 <link rel="prev" href="../examples.html" title="Examples">
 <link rel="next" href="../appendices.html" title="Appendices">
@@ -24,18 +22,16 @@
 <div class="spirit-nav">
 <a accesskey="p" href="../examples.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../appendices.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.examples.thread_safe_deferred_traces"></a><a href="thread_safe_deferred_traces.html" title="Thread
- safe deferred traces">Thread
+<a name="toward_boost_interthreads.examples.thread_safe_deferred_traces"></a><a class="link" href="thread_safe_deferred_traces.html" title="Thread safe deferred traces">Thread
       safe deferred traces</a>
 </h3></div></div></div>
 <p>
         When executing on a multi thread environment, the output lines on std::cout
         could interleave. We can synchronize these outputs with a global mutex
       </p>
-<pre class="programlisting">
-<span class="special">{</span>
+<pre class="programlisting"><span class="special">{</span>
    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">lock_guard</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">lock</span><span class="special">(</span><span class="identifier">global_cout_mutex</span><span class="special">);</span>
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="special">...</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> <span class="special">;</span>
 <span class="special">}</span>
@@ -74,8 +70,7 @@
 <p>
         This can be encapsulated in an async_ostream class
       </p>
-<pre class="programlisting">
-<span class="keyword">class</span> <span class="identifier">async_ostream</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">stream</span><span class="special">&lt;</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">async_ostream_sink</span><span class="special">&gt;</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">async_ostream</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">stream</span><span class="special">&lt;</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">async_ostream_sink</span><span class="special">&gt;</span> <span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
     <span class="keyword">typedef</span> <span class="keyword">char</span> <span class="identifier">char_type</span><span class="special">;</span>
     <span class="keyword">typedef</span> <span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">sink_tag</span> <span class="identifier">category</span><span class="special">;</span>
@@ -89,15 +84,13 @@
 <p>
         With this interface the user can use cout_ as it used std::cout.
       </p>
-<pre class="programlisting">
-<span class="identifier">cout_</span> <span class="special">&lt;&lt;</span> <span class="string">"Hello World!"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> <span class="special">;</span>
+<pre class="programlisting"><span class="identifier">cout_</span> <span class="special">&lt;&lt;</span> <span class="string">"Hello World!"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> <span class="special">;</span>
 </pre>
 <p>
         All the magic is in the <code class="computeroutput"><span class="keyword">template</span> <span class="keyword">class</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">stream</span><span class="special">&lt;&gt;</span></code>. The parameter must be a model of
         a sink (See Boost.Iostreams). Here it is.
       </p>
-<pre class="programlisting">
-<span class="keyword">namespace</span> <span class="identifier">detail</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">detail</span> <span class="special">{</span>
     <span class="keyword">struct</span> <span class="identifier">async_ostream_sink</span> <span class="special">{</span>
         <span class="keyword">typedef</span> <span class="keyword">char</span> <span class="identifier">char_type</span><span class="special">;</span>
         <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iostreams</span><span class="special">::</span><span class="identifier">sink_tag</span> <span class="identifier">category</span><span class="special">;</span>
@@ -117,8 +110,7 @@
         in order to mask the implementation, the Pimpl idiom is used. The implementation
         of these functions is straigtforward:
       </p>
-<pre class="programlisting">
-<span class="identifier">async_ostream</span><span class="special">::</span><span class="identifier">async_ostream</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">)</span>
+<pre class="programlisting"><span class="identifier">async_ostream</span><span class="special">::</span><span class="identifier">async_ostream</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">)</span>
     <span class="special">:</span> <span class="identifier">base_type</span><span class="special">(</span><span class="identifier">os</span><span class="special">)</span> <span class="special">{}</span>
 
 <span class="keyword">void</span> <span class="identifier">async_ostream</span><span class="special">::</span><span class="identifier">flush</span><span class="special">()</span> <span class="special">{</span>
@@ -141,8 +133,7 @@
 <p>
         Let me continue with the handle of the Pimpl pattern:
       </p>
-<pre class="programlisting">
-<span class="keyword">struct</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span> <span class="special">{</span>
     <span class="identifier">impl</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">);</span>
     <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os_</span><span class="special">;</span>
     <span class="identifier">tsss_type</span> <span class="identifier">tsss_</span><span class="special">;</span>
@@ -163,15 +154,13 @@
         <span class="identifier">tsss_</span></code> is used to encapsulate the
         logic specific to each thread.
       </p>
-<pre class="programlisting">
-<span class="keyword">typedef</span> <span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;</span><span class="identifier">async_ostream_thread_ctx</span><span class="special">&gt;</span> <span class="identifier">tsss_type</span><span class="special">;</span>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;</span><span class="identifier">async_ostream_thread_ctx</span><span class="special">&gt;</span> <span class="identifier">tsss_type</span><span class="special">;</span>
 </pre>
 <p>
         A priority queue <code class="computeroutput"><span class="identifier">queue_</span></code> will
         be used by the concentrator thread to order the stringstreams by date.
       </p>
-<pre class="programlisting">
-<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
 <span class="keyword">struct</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">timestamped</span> <span class="special">{</span>
     <span class="identifier">system_time</span> <span class="identifier">date_</span><span class="special">;</span>
     <span class="keyword">unsigned</span> <span class="identifier">seq_</span><span class="special">;</span>
@@ -201,14 +190,12 @@
         To finish the field declaration there is the concentrator thread implemented
         by the loop function.
       </p>
-<pre class="programlisting">
-<span class="special">,</span> <span class="identifier">thread_</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span><span class="identifier">loop</span><span class="special">,</span> <span class="keyword">this</span><span class="special">))</span>
+<pre class="programlisting"><span class="special">,</span> <span class="identifier">thread_</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span><span class="identifier">loop</span><span class="special">,</span> <span class="keyword">this</span><span class="special">))</span>
 </pre>
 <p>
         Comming back to the sink implementation,
       </p>
-<pre class="programlisting">
-<span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">impl</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">)</span>
+<pre class="programlisting"><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">impl</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">)</span>
 <span class="special">:</span> <span class="identifier">os_</span><span class="special">(</span><span class="identifier">os</span><span class="special">)</span>
 <span class="special">,</span> <span class="identifier">tsss_</span><span class="special">(</span><span class="identifier">terminate</span><span class="special">)</span>
 <span class="special">,</span> <span class="identifier">thread_</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span><span class="identifier">loop</span><span class="special">,</span> <span class="keyword">this</span><span class="special">))</span>
@@ -219,8 +206,7 @@
         before the thread finishes. To avoid optimizations a non const call inc is
         done while waiting the queue empties.
       </p>
-<pre class="programlisting">
-<span class="keyword">void</span> <span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">(</span><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">async_ostream_thread_ctx</span><span class="special">&gt;</span> <span class="identifier">that</span><span class="special">)</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">(</span><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">async_ostream_thread_ctx</span><span class="special">&gt;</span> <span class="identifier">that</span><span class="special">)</span> <span class="special">{</span>
     <span class="keyword">while</span> <span class="special">(!</span><span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">empty</span><span class="special">())</span> <span class="special">{</span>
         <span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">inc</span><span class="special">();</span>
     <span class="special">}</span>
@@ -230,8 +216,7 @@
         The central sink function is write. Here instead to lock a mutex the function
         forwards to the thread specific shared pointer. We will see below how <code class="computeroutput"><span class="identifier">async_ostream_thread_ctx</span></code> handles this call.
       </p>
-<pre class="programlisting">
-<span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">{</span>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">{</span>
     <span class="keyword">return</span> <span class="identifier">tsss_</span><span class="special">-&gt;</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">n</span><span class="special">);</span>
 <span class="special">}</span>
 </pre>
@@ -239,8 +224,7 @@
         It is time to analyze the thread specific context before seeing how the concentrator
         is implemented.
       </p>
-<pre class="programlisting">
-<span class="keyword">struct</span> <span class="identifier">async_ostream_thread_ctx</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">async_ostream_thread_ctx</span> <span class="special">{</span>
     <span class="identifier">async_ostream_thread_ctx</span><span class="special">();</span>
     <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">);</span>
     <span class="keyword">void</span> <span class="identifier">flush</span><span class="special">();</span>
@@ -259,8 +243,7 @@
         Each thread has a pointer to the current timestamped stringstream wich is
         used for the current output flow, i.e. by the write function.
       </p>
-<pre class="programlisting">
-<span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">{</span>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">write</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">{</span>
     <span class="identifier">buffer</span><span class="special">().</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">n</span><span class="special">);</span>
     <span class="keyword">return</span> <span class="identifier">n</span><span class="special">;</span>
 <span class="special">}</span>
@@ -270,8 +253,7 @@
         <code class="computeroutput"><span class="identifier">sec_</span></code> integer is used as monotonic
         sequence in conjuntion with the timestamp.
       </p>
-<pre class="programlisting">
-<span class="keyword">void</span> <span class="identifier">flush</span><span class="special">()</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">flush</span><span class="special">()</span> <span class="special">{</span>
     <span class="identifier">current_</span><span class="special">-&gt;</span><span class="identifier">reset_date</span><span class="special">(</span><span class="identifier">seq_</span><span class="special">);</span>
     <span class="special">++</span><span class="identifier">seq_</span><span class="special">;</span>
     <span class="keyword">if</span> <span class="special">(</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">size</span><span class="special">()&gt;</span><span class="number">2</span><span class="special">)</span> <span class="special">{</span>
@@ -290,8 +272,7 @@
 <p>
         These queue elements will be read by the concentrator using the get function.
       </p>
-<pre class="programlisting">
-<span class="identifier">element_type</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="special">{</span>
+<pre class="programlisting"><span class="identifier">element_type</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="special">{</span>
     <span class="keyword">if</span> <span class="special">(</span><span class="identifier">queue_</span><span class="special">.</span><span class="identifier">size</span><span class="special">()&gt;</span><span class="number">1</span><span class="special">)</span> <span class="special">{</span>
         <span class="keyword">return</span> <span class="identifier">get_i</span><span class="special">();</span>
     <span class="special">}</span> <span class="keyword">else</span> <span class="special">{</span>
@@ -310,8 +291,7 @@
 <p>
         The concentrator loop looks like:
       </p>
-<pre class="programlisting">
-<span class="keyword">void</span> <span class="identifier">async_ostream_sink_impl</span><span class="special">::</span><span class="identifier">loop</span><span class="special">(</span><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">*</span> <span class="identifier">that</span><span class="special">)</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">async_ostream_sink_impl</span><span class="special">::</span><span class="identifier">loop</span><span class="special">(</span><span class="identifier">async_ostream_sink</span><span class="special">::</span><span class="identifier">impl</span><span class="special">*</span> <span class="identifier">that</span><span class="special">)</span> <span class="special">{</span>
     <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os_</span> <span class="special">=</span> <span class="identifier">that</span><span class="special">-&gt;</span><span class="identifier">os_</span><span class="special">;</span>
     <span class="keyword">for</span><span class="special">(;;)</span> <span class="special">{</span>
         <span class="comment">// sleeps a little bit

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/overview.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/overview.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/overview.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,14 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Overview</title>
-<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="prev" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="next" href="overview/motivation.html" title=" Motivation">
+<title>Overview</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="up" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="prev" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="next" href="users_guide.html" title="Users'Guide">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -21,129 +20,61 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="overview/motivation.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="users_guide.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="toward_boost_interthreads.overview"></a> Overview
+<a name="toward_boost_interthreads.overview"></a><a class="link" href="overview.html" title="Overview">Overview</a>
 </h2></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"> Motivation</span></dt>
+<dt><span class="section">Motivation</span></dt>
 <dd><dl>
-<dt><span class="section">Decorators</span></dt>
-<dt><span class="section"><a href="overview/motivation.html#toward_boost_interthreads.overview.motivation.sharing_thread_local_storage">Sharing
+<dt><span class="section">Decorators</span></dt>
+<dt><span class="section"><a href="overview.html#toward_boost_interthreads.overview.motivation.sharing_thread_local_storage">Sharing
         Thread Local Storage</a></span></dt>
-<dt><span class="section"><a href="overview/motivation.html#toward_boost_interthreads.overview.motivation.keep_alive_motivation">
- Keep Alive</a></span></dt>
-<dt><span class="section"><a href="overview/motivation.html#toward_boost_interthreads.overview.motivation.thread_tuple">Thread
+<dt><span class="section"><a href="overview.html#toward_boost_interthreads.overview.motivation.keep_alive_motivation">Keep
+ Alive</a></span></dt>
+<dt><span class="section"><a href="overview.html#toward_boost_interthreads.overview.motivation.thread_tuple">Thread
         Tuple</a></span></dt>
 </dl></dd>
+<dt><span class="section">Description</span></dt>
 </dl></div>
-<a name="toward_boost_interthreads.overview.description"></a><h3>
-<a name="id4946103"></a>
- Description
- </h3>
-<p>
- <span class="bold"><strong>Boost.InterThreads</strong></span> extends Boost.Threads adding some features:
- </p>
-<div class="itemizedlist"><ul type="disc">
-<li>
- A thread_decoration class allowing to define setup/cleanup functions which
- will be called only once by thread (if the thread function is decorated with
- thread_decorator): setup before the thread function and cleanup at thread
- exit. It is used together with asynchronous_executor_decorator
- </li>
-<li>
- A thread_decorator/thread_decorate class/function which decorate a thread
- function in order to call the setup and the cleanup of all the thread_decorations.
- </li>
-<li>
- A thread specific shared pointer which is an extension of the thread_specific_ptr
- providing access to this thread specific context from other threads. As it
- is shared the stored pointer is a shared_ptr instead of a raw one.
- </li>
-<li>
- A thread keep alive mechanism: this mechanism allows to detect threads that
- do not prove that they are alive by calling to the keep_alive_point regularly.
- When a thread is declared dead a user provided function is called, which
- by default will abort the program.
- </li>
-<li>
- A thread static array
- <div class="itemizedlist"><ul type="circle"><li>
- thread tuple: defines a thread groupe where the number of threads is
- know statically and the threads are created at construction time in oposition
- to a thread_group.
- </li></ul></div>
-</li>
-<li>
- A thread static array and a thread group with wait for any feature
- <div class="itemizedlist"><ul type="circle">
-<li>
- set_once: a synchonizer that allows to set a variable only once, notifying
- to the variable value to whatever is waiting for that.
- </li>
-<li>
- thread_tuple_once: an extension of the boost::thread_tuple which allows
- to join the completion of any thread using for that the set_once synchronizer.
- </li>
-<li>
- thread_group_once: an extension of the boost::thread_group which allows
- to join the completion of any thread in the group using for that the
- set_once synchronizer.
- </li>
-</ul></div>
-</li>
-</ul></div>
-<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>
- thread_decorator and thread_specific_shared_ptr are based on the original
- implementation of threadalert written by Roland Schwarz.
- </p></td></tr>
-</table></div>
-<a name="toward_boost_interthreads.overview.how_to_use_this_documentation"></a><h3>
-<a name="id4948728"></a>
- <a href="overview.html#toward_boost_interthreads.overview.how_to_use_this_documentation">How
+<a name="toward_boost_interthreads.overview.how_to_use_this_documentation"></a><h4>
+<a name="id3012937"></a>
+ <a class="link" href="overview.html#toward_boost_interthreads.overview.how_to_use_this_documentation">How
       to Use This Documentation</a>
- </h3>
+ </h4>
 <p>
       This documentation makes use of the following naming and formatting conventions.
     </p>
-<div class="itemizedlist"><ul type="disc">
-<li>
- Code is in <code class="computeroutput"><span class="identifier">fixed</span> <span class="identifier">width</span>
- <span class="identifier">font</span></code> and is syntax-highlighted.
- </li>
-<li>
- Replaceable text that you will need to supply is in
- <em class="replaceable"><code>
- italics
- </code></em>
- .
- </li>
-<li>
- If a name refers to a free function, it is specified like this: <code class="computeroutput"><span class="identifier">free_function</span><span class="special">()</span></code>;
- that is, it is in code font and its name is followed by <code class="computeroutput"><span class="special">()</span></code>
- to indicate that it is a free function.
- </li>
-<li>
- If a name refers to a class template, it is specified like this: <code class="computeroutput"><span class="identifier">class_template</span><span class="special">&lt;&gt;</span></code>;
- that is, it is in code font and its name is followed by <code class="computeroutput"><span class="special">&lt;&gt;</span></code>
- to indicate that it is a class template.
- </li>
-<li>
- If a name refers to a function-like macro, it is specified like this: <code class="computeroutput"><span class="identifier">MACRO</span><span class="special">()</span></code>;
- that is, it is uppercase in code font and its name is followed by <code class="computeroutput"><span class="special">()</span></code> to indicate that it is a function-like
- macro. Object-like macros appear without the trailing <code class="computeroutput"><span class="special">()</span></code>.
- </li>
-<li>
- Names that refer to <span class="emphasis"><em>concepts</em></span> in the generic programming
- sense are specified in CamelCase.
- </li>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ Code is in <code class="computeroutput"><span class="identifier">fixed</span> <span class="identifier">width</span>
+ <span class="identifier">font</span></code> and is syntax-highlighted.
+ </li>
+<li class="listitem">
+ Replaceable text that you will need to supply is in <em class="replaceable"><code>italics</code></em>.
+ </li>
+<li class="listitem">
+ If a name refers to a free function, it is specified like this: <code class="computeroutput"><span class="identifier">free_function</span><span class="special">()</span></code>;
+ that is, it is in code font and its name is followed by <code class="computeroutput"><span class="special">()</span></code>
+ to indicate that it is a free function.
+ </li>
+<li class="listitem">
+ If a name refers to a class template, it is specified like this: <code class="computeroutput"><span class="identifier">class_template</span><span class="special">&lt;&gt;</span></code>;
+ that is, it is in code font and its name is followed by <code class="computeroutput"><span class="special">&lt;&gt;</span></code>
+ to indicate that it is a class template.
+ </li>
+<li class="listitem">
+ If a name refers to a function-like macro, it is specified like this:
+ <code class="computeroutput"><span class="identifier">MACRO</span><span class="special">()</span></code>;
+ that is, it is uppercase in code font and its name is followed by <code class="computeroutput"><span class="special">()</span></code> to indicate that it is a function-like
+ macro. Object-like macros appear without the trailing <code class="computeroutput"><span class="special">()</span></code>.
+ </li>
+<li class="listitem">
+ Names that refer to <span class="emphasis"><em>concepts</em></span> in the generic programming
+ sense are specified in CamelCase.
+ </li>
 </ul></div>
 <div class="note"><table border="0" summary="Note">
 <tr>
@@ -158,17 +89,318 @@
 <p>
       Finally, you can mentally add the following to any code fragments in this document:
     </p>
-<pre class="programlisting">
-<span class="comment">// Include all of InterThreads
+<pre class="programlisting"><span class="comment">// Include all of InterThreads
 </span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
 
 <span class="comment">// Create a namespace aliases
 </span><span class="keyword">namespace</span> <span class="identifier">bith</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">interthreads</span><span class="special">;</span>
 </pre>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.overview.motivation"></a><a class="link" href="overview.html#toward_boost_interthreads.overview.motivation" title="Motivation">Motivation</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">Decorators</span></dt>
+<dt><span class="section"><a href="overview.html#toward_boost_interthreads.overview.motivation.sharing_thread_local_storage">Sharing
+ Thread Local Storage</a></span></dt>
+<dt><span class="section"><a href="overview.html#toward_boost_interthreads.overview.motivation.keep_alive_motivation">Keep
+ Alive</a></span></dt>
+<dt><span class="section"><a href="overview.html#toward_boost_interthreads.overview.motivation.thread_tuple">Thread
+ Tuple</a></span></dt>
+</dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.overview.motivation.decorators"></a><a class="link" href="overview.html#toward_boost_interthreads.overview.motivation.decorators" title="Decorators">Decorators</a>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">call_once</span></code> provides a mechanism for ensuring
+ that an initialization routine is run exactly once on a programm without
+ data races or deadlocks. <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">at_thread_exit</span></code>
+ allows to execute a cleanup function at thread exit.
+ </p>
+<p>
+ If we want a setup function to be executed once at the begining on the
+ threads and a cleanup at thread exit we need to do
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">thread_main</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">setup</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">at_thread_exit</span><span class="special">(</span><span class="identifier">cleanup</span><span class="special">);</span>
+ <span class="comment">// do whatever
+</span> <span class="comment">// ...
+</span><span class="special">}</span>
+<span class="comment">// ...
+</span><span class="special">{</span>
+ <span class="identifier">launch</span><span class="special">(</span><span class="identifier">thread_main</span><span class="special">);</span>
+ <span class="comment">//...
+</span><span class="special">}</span>
+</pre>
+<p>
+ Of course we can define an init function that calls setup and do the registration.
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">init</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">setup</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">at_thread_exit</span><span class="special">(</span><span class="identifier">cleanup</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Different services could require these setup/cleanup functions to be called,
+ and so each thread function should do
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">thread_main</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">serv1</span><span class="special">::</span><span class="identifier">init</span><span class="special">();</span>
+ <span class="comment">// ...
+</span> <span class="identifier">servN</span><span class="special">::</span><span class="identifier">init</span><span class="special">();</span>
+ <span class="comment">// do whatever using serv1, ..., servN.
+</span> <span class="comment">// ...
+</span><span class="special">}</span>
+</pre>
+<p>
+ This approach is valid for services that the user can configure for specifics
+ threads, but not for services that must be installed on every thread.
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_decoration</span></code> ensures
+ that a setup function is called only once by thread before the thread function
+ provided the thread is created with a decorator wrapper. This setup function
+ is usualy used to set thread specific pointers and call functions once.
+ </p>
+<p>
+ The conterpart of the setup is the cleanup. The <code class="computeroutput"><span class="identifier">thread_decoration</span></code>
+ takes an optional cleanup function which will be executed at thread exit.
+ </p>
+<pre class="programlisting"><span class="comment">// define in only the implementation file of each service
+</span>
+<span class="identifier">boost</span><span class="special">::</span><span class="identifier">interthreads</span><span class="special">::</span><span class="identifier">decoration</span> <span class="identifier">serv1</span><span class="special">:</span><span class="identifier">decoration</span><span class="special">(</span><span class="identifier">serv1</span><span class="special">:</span><span class="identifier">setup</span><span class="special">,</span> <span class="identifier">serv1</span><span class="special">:</span><span class="identifier">cleanup</span><span class="special">);</span>
+<span class="comment">// ...
+</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interthreads</span><span class="special">::</span><span class="identifier">decoration</span> <span class="identifier">servN</span><span class="special">:</span><span class="identifier">decoration</span><span class="special">(</span><span class="identifier">servN</span><span class="special">:</span><span class="identifier">setup</span><span class="special">,</span> <span class="identifier">servN</span><span class="special">:</span><span class="identifier">cleanup</span><span class="special">);</span>
+
+
+<span class="keyword">void</span> <span class="identifier">thread_main</span><span class="special">()</span> <span class="special">{</span>
+ <span class="comment">// do whatever using serv1, ..., servN.
+</span> <span class="comment">// ...
+</span><span class="special">}</span>
+
+<span class="comment">// ...
+</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">boost</span><span class="special">::</span><span class="identifier">interthreads</span><span class="special">::</span><span class="identifier">make_decorator</span><span class="special">(</span><span class="identifier">thread_main</span><span class="special">));</span>
+ <span class="comment">//...
+</span><span class="special">}</span>
+</pre>
+<p>
+ We can use a basic_threader_decorator as asynchronous executor to fork
+ thread_main.
+ </p>
+<pre class="programlisting"><span class="comment">// ...
+</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">fork</span><span class="special">(</span><span class="identifier">basic_threader_decorator</span><span class="special">(),</span> <span class="identifier">thread_main</span><span class="special">);</span>
+ <span class="comment">//...
+</span><span class="special">}</span>
+</pre>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.overview.motivation.sharing_thread_local_storage"></a><a class="link" href="overview.html#toward_boost_interthreads.overview.motivation.sharing_thread_local_storage" title="Sharing Thread Local Storage">Sharing
+ Thread Local Storage</a>
+</h4></div></div></div>
+<p>
+ Thread local storage allows multi-threaded applications to have a separate
+ instance of a given data item for each thread. But does not provide any
+ mechanism to access this data from other threads. Although this seems to
+ defeat the whole point of thread-specific storage, it is useful when these
+ contexts need some kind of communication between them, or some central
+ global object needs to control them.
+ </p>
+<p>
+ The intent of the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span></code>
+ class is to allow two threads to establish a shared memory space, without
+ requiring the user code to pass any information. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span></code>
+ provides a portable mechanism for shared thread-local storage that works
+ on all compilers supported by <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code>
+ and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span></code>. Each instance of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span></code> represents
+ a pointer to a shared object where each thread must have a distinct value.
+ </p>
+<p>
+ Only the current thread can modify the thread specific shared pointer using
+ the non const functions reset/release functions. Each time these functions
+ are used, a synchronization must be ensured to update the mapping. The
+ other threads have only read access to the shared_ptr&lt;T&gt;. It is worth
+ saying that the shared object T must be thread safe.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.overview.motivation.keep_alive_motivation"></a><a class="link" href="overview.html#toward_boost_interthreads.overview.motivation.keep_alive_motivation" title="Keep Alive">Keep
+ Alive</a>
+</h4></div></div></div>
+<p>
+ On fault tolerant systems we need to be able to detect threads that could
+ stay on a loop, or simply blocked.
+ </p>
+<p>
+ One way to detect this situations is to require the thread to signal it
+ is alive by calling a check point function. Of course it should be up to
+ the user to state when this mechanism is enabled or disabled. At the begining
+ of a thread the keep alive mechanism is disabled.
+ </p>
+<p>
+ A thread will be considered dead if during a given period the number of
+ checkins is inferior to a given threshold. These two parameters can be
+ given when the keep alive mechanislm is enabled.
+ </p>
+<p>
+ The controler checks at predefined intervals if the thread is dead, and
+ in this case it will call a user specific function which by default aborts
+ the program.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.overview.motivation.thread_tuple"></a><a class="link" href="overview.html#toward_boost_interthreads.overview.motivation.thread_tuple" title="Thread Tuple">Thread
+ Tuple</a>
+</h4></div></div></div>
+<p>
+ The <code class="computeroutput"><span class="identifier">boots</span><span class="special">::</span><span class="identifier">thread_group</span></code> class allows to group dynamically
+ threads. This means that the container must be dynamic.
+ </p>
+<pre class="programlisting"><span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_group</span> <span class="identifier">tg</span><span class="special">;</span>
+ <span class="identifier">tg</span><span class="special">.</span><span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">);</span>
+ <span class="identifier">tg</span><span class="special">.</span><span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">thread2</span><span class="special">);</span>
+ <span class="identifier">tg</span><span class="special">.</span><span class="identifier">join_all</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code>
+ class is responsible for launching and managing a static collection of
+ threads that are related in some way. No new threads can be added to the
+ tuple once constructed. So we can write
+ </p>
+<pre class="programlisting"><span class="special">{</span>
+ <span class="identifier">bith</span><span class="special">::</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;</span> <span class="identifier">tt</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">,</span> <span class="identifier">thread2</span><span class="special">);</span>
+ <span class="identifier">tt</span><span class="special">.</span><span class="identifier">join_all</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ As this
+ </p>
+<pre class="programlisting"><span class="identifier">bith</span><span class="special">::</span><span class="identifier">conc_join_all</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">,</span> <span class="identifier">thread2</span><span class="special">);</span>
+</pre>
+<p>
+ In addition the user can join the first finishing thread.
+ </p>
+<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">bith</span><span class="special">::</span><span class="identifier">conc_join_any</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">,</span> <span class="identifier">thread2</span><span class="special">);</span>
+</pre>
+<p>
+ Evidently, thread_tuple can not be used when we need dynamic creation or
+ deletion. The <code class="computeroutput"><span class="identifier">boots</span><span class="special">::</span><span class="identifier">thread_group</span></code> class allows to group dynamically
+ threads.
+ </p>
+<pre class="programlisting"><span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_group</span> <span class="identifier">tg</span><span class="special">;</span>
+ <span class="identifier">tg</span><span class="special">.</span><span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">);</span>
+
+ <span class="comment">// later on
+</span> <span class="identifier">tg</span><span class="special">.</span><span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">thread2</span><span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">th3</span><span class="special">(</span><span class="identifier">thread3</span><span class="special">)</span>
+ <span class="identifier">tg</span><span class="special">.</span><span class="identifier">add_thread</span><span class="special">(</span><span class="identifier">th3</span><span class="special">);</span>
+
+ <span class="comment">// later on
+</span> <span class="identifier">tg</span><span class="special">.</span><span class="identifier">remove_thread</span><span class="special">(</span><span class="identifier">th3</span><span class="special">);</span>
+
+ <span class="identifier">tg</span><span class="special">.</span><span class="identifier">join_all</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Objects of type <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code> are movable, so they can be stored
+ in move-aware containers, and returned from functions. This allows the
+ details of thread tuple creation to be wrapped in a function.
+ </p>
+<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interthreads</span><span class="special">::</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;</span> <span class="identifier">make_thread_tuple</span><span class="special">(...);</span>
+
+<span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">bith</span><span class="special">::</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;</span> <span class="identifier">some_thread_tuple</span><span class="special">=</span><span class="identifier">bith</span><span class="special">::</span><span class="identifier">make_thread_tuple</span><span class="special">(</span><span class="identifier">f1</span><span class="special">,</span> <span class="identifier">g2</span><span class="special">);</span>
+ <span class="identifier">some_thread_tuple</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.overview.description"></a><a class="link" href="overview.html#toward_boost_interthreads.overview.description" title="Description">Description</a>
+</h3></div></div></div>
+<p>
+ <span class="bold"><strong>Boost.InterThreads</strong></span> extends Boost.Threads adding some features:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ A thread_decoration class allowing to define setup/cleanup functions
+ which will be called only once by thread (if the thread function is decorated
+ with thread_decorator): setup before the thread function and cleanup
+ at thread exit. It is used together with asynchronous_executor_decorator
+ </li>
+<li class="listitem">
+ A thread_decorator/thread_decorate class/function which decorate a thread
+ function in order to call the setup and the cleanup of all the thread_decorations.
+ </li>
+<li class="listitem">
+ A thread specific shared pointer which is an extension of the thread_specific_ptr
+ providing access to this thread specific context from other threads.
+ As it is shared the stored pointer is a shared_ptr instead of a raw one.
+ </li>
+<li class="listitem">
+ A thread keep alive mechanism: this mechanism allows to detect threads
+ that do not prove that they are alive by calling to the keep_alive_point
+ regularly. When a thread is declared dead a user provided function is
+ called, which by default will abort the program.
+ </li>
+<li class="listitem">
+<p class="simpara">
+ A thread static array
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
+ thread tuple: defines a thread groupe where the number of threads
+ is know statically and the threads are created at construction time
+ in oposition to a thread_group.
+ </li></ul></div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ A thread static array and a thread group with wait for any feature
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem">
+ set_once: a synchonizer that allows to set a variable only once,
+ notifying to the variable value to whatever is waiting for that.
+ </li>
+<li class="listitem">
+ thread_tuple_once: an extension of the boost::thread_tuple which
+ allows to join the completion of any thread using for that the set_once
+ synchronizer.
+ </li>
+<li class="listitem">
+ thread_group_once: an extension of the boost::thread_group which
+ allows to join the completion of any thread in the group using for
+ that the set_once synchronizer.
+ </li>
+</ul></div>
+</li>
+</ul></div>
+<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>
+ thread_decorator and thread_specific_shared_ptr are based on the original
+ implementation of threadalert written by Roland Schwarz.
+ </p></td></tr>
+</table></div>
+</div>
 </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; 2008 -2009 Vicente J. Botet Escriba<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2008 -2009,2011 Vicente J. Botet Escriba<p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
         file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       </p>
@@ -176,7 +408,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="overview/motivation.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="users_guide.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/overview/motivation.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/overview/motivation.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/overview/motivation.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,14 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Motivation</title>
+<title>Motivation</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../overview.html" title=" Overview">
-<link rel="prev" href="../overview.html" title=" Overview">
-<link rel="next" href="../users_guide.html" title=" Users'Guide">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
+<link rel="up" href="../overview.html" title="Overview">
+<link rel="prev" href="../overview.html" title="Overview">
+<link rel="next" href="../users_guide.html" title="Users'Guide">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -23,22 +22,22 @@
 <div class="spirit-nav">
 <a accesskey="p" href="../overview.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../users_guide.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.overview.motivation"></a> Motivation
+<a name="toward_boost_interthreads.overview.motivation"></a><a class="link" href="motivation.html" title="Motivation">Motivation</a>
 </h3></div></div></div>
 <div class="toc"><dl>
 <dt><span class="section">Decorators</span></dt>
 <dt><span class="section"><a href="motivation.html#toward_boost_interthreads.overview.motivation.sharing_thread_local_storage">Sharing
         Thread Local Storage</a></span></dt>
-<dt><span class="section"><a href="motivation.html#toward_boost_interthreads.overview.motivation.keep_alive_motivation">
- Keep Alive</a></span></dt>
+<dt><span class="section"><a href="motivation.html#toward_boost_interthreads.overview.motivation.keep_alive_motivation">Keep
+ Alive</a></span></dt>
 <dt><span class="section"><a href="motivation.html#toward_boost_interthreads.overview.motivation.thread_tuple">Thread
         Tuple</a></span></dt>
 </dl></div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.overview.motivation.decorators"></a>Decorators
+<a name="toward_boost_interthreads.overview.motivation.decorators"></a><a class="link" href="motivation.html#toward_boost_interthreads.overview.motivation.decorators" title="Decorators">Decorators</a>
 </h4></div></div></div>
 <p>
           <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">call_once</span></code> provides a mechanism for ensuring
@@ -50,8 +49,7 @@
           If we want a setup function to be executed once at the begining on the
           threads and a cleanup at thread exit we need to do
         </p>
-<pre class="programlisting">
-<span class="keyword">void</span> <span class="identifier">thread_main</span><span class="special">()</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">thread_main</span><span class="special">()</span> <span class="special">{</span>
     <span class="identifier">setup</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">at_thread_exit</span><span class="special">(</span><span class="identifier">cleanup</span><span class="special">);</span>
     <span class="comment">// do whatever
@@ -66,8 +64,7 @@
 <p>
           Of course we can define an init function that calls setup and do the registration.
         </p>
-<pre class="programlisting">
-<span class="keyword">void</span> <span class="identifier">init</span><span class="special">()</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">init</span><span class="special">()</span> <span class="special">{</span>
     <span class="identifier">setup</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">at_thread_exit</span><span class="special">(</span><span class="identifier">cleanup</span><span class="special">);</span>
 <span class="special">}</span>
@@ -76,8 +73,7 @@
           Different services could require these setup/cleanup functions to be called,
           and so each thread function should do
         </p>
-<pre class="programlisting">
-<span class="keyword">void</span> <span class="identifier">thread_main</span><span class="special">()</span> <span class="special">{</span>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">thread_main</span><span class="special">()</span> <span class="special">{</span>
     <span class="identifier">serv1</span><span class="special">::</span><span class="identifier">init</span><span class="special">();</span>
     <span class="comment">// ...
 </span> <span class="identifier">servN</span><span class="special">::</span><span class="identifier">init</span><span class="special">();</span>
@@ -99,8 +95,7 @@
           The conterpart of the setup is the cleanup. The <code class="computeroutput"><span class="identifier">thread_decoration</span></code>
           takes an optional cleanup function which will be executed at thread exit.
         </p>
-<pre class="programlisting">
-<span class="comment">// define in only the implementation file of each service
+<pre class="programlisting"><span class="comment">// define in only the implementation file of each service
 </span>
 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">interthreads</span><span class="special">::</span><span class="identifier">decoration</span> <span class="identifier">serv1</span><span class="special">:</span><span class="identifier">decoration</span><span class="special">(</span><span class="identifier">serv1</span><span class="special">:</span><span class="identifier">setup</span><span class="special">,</span> <span class="identifier">serv1</span><span class="special">:</span><span class="identifier">cleanup</span><span class="special">);</span>
 <span class="comment">// ...
@@ -122,18 +117,16 @@
           We can use a basic_threader_decorator as asynchronous executor to fork
           thread_main.
         </p>
-<pre class="programlisting">
-<span class="comment">// ...
+<pre class="programlisting"><span class="comment">// ...
 </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">fork</span><span class="special">(</span><span class="identifier">basic_threader_decorator</span><span class="special">(),</span> <span class="identifier">thread_main</span><span class="special">);</span>
     <span class="comment">//...
 </span><span class="special">}</span>
 </pre>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.overview.motivation.sharing_thread_local_storage"></a><a href="motivation.html#toward_boost_interthreads.overview.motivation.sharing_thread_local_storage" title="Sharing
- Thread Local Storage">Sharing
+<a name="toward_boost_interthreads.overview.motivation.sharing_thread_local_storage"></a><a class="link" href="motivation.html#toward_boost_interthreads.overview.motivation.sharing_thread_local_storage" title="Sharing Thread Local Storage">Sharing
         Thread Local Storage</a>
 </h4></div></div></div>
 <p>
@@ -161,11 +154,10 @@
           saying that the shared object T must be thread safe.
         </p>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.overview.motivation.keep_alive_motivation"></a><a href="motivation.html#toward_boost_interthreads.overview.motivation.keep_alive_motivation" title="
- Keep Alive">
- Keep Alive</a>
+<a name="toward_boost_interthreads.overview.motivation.keep_alive_motivation"></a><a class="link" href="motivation.html#toward_boost_interthreads.overview.motivation.keep_alive_motivation" title="Keep Alive">Keep
+ Alive</a>
 </h4></div></div></div>
 <p>
           On fault tolerant systems we need to be able to detect threads that could
@@ -188,18 +180,16 @@
           the program.
         </p>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.overview.motivation.thread_tuple"></a><a href="motivation.html#toward_boost_interthreads.overview.motivation.thread_tuple" title="Thread
- Tuple">Thread
+<a name="toward_boost_interthreads.overview.motivation.thread_tuple"></a><a class="link" href="motivation.html#toward_boost_interthreads.overview.motivation.thread_tuple" title="Thread Tuple">Thread
         Tuple</a>
 </h4></div></div></div>
 <p>
           The <code class="computeroutput"><span class="identifier">boots</span><span class="special">::</span><span class="identifier">thread_group</span></code> class allows to group dynamically
           threads. This means that the container must be dynamic.
         </p>
-<pre class="programlisting">
-<span class="special">{</span>
+<pre class="programlisting"><span class="special">{</span>
     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_group</span> <span class="identifier">tg</span><span class="special">;</span>
     <span class="identifier">tg</span><span class="special">.</span><span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">);</span>
     <span class="identifier">tg</span><span class="special">.</span><span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">thread2</span><span class="special">);</span>
@@ -212,8 +202,7 @@
           threads that are related in some way. No new threads can be added to the
           tuple once constructed. So we can write
         </p>
-<pre class="programlisting">
-<span class="special">{</span>
+<pre class="programlisting"><span class="special">{</span>
     <span class="identifier">bith</span><span class="special">::</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;</span> <span class="identifier">tt</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">,</span> <span class="identifier">thread2</span><span class="special">);</span>
     <span class="identifier">tt</span><span class="special">.</span><span class="identifier">join_all</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">);</span>
 <span class="special">}</span>
@@ -221,22 +210,19 @@
 <p>
           As this
         </p>
-<pre class="programlisting">
-<span class="identifier">bith</span><span class="special">::</span><span class="identifier">conc_join_all</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">,</span> <span class="identifier">thread2</span><span class="special">);</span>
+<pre class="programlisting"><span class="identifier">bith</span><span class="special">::</span><span class="identifier">conc_join_all</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">,</span> <span class="identifier">thread2</span><span class="special">);</span>
 </pre>
 <p>
           In addition the user can join the first finishing thread.
         </p>
-<pre class="programlisting">
-<span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">bith</span><span class="special">::</span><span class="identifier">conc_join_any</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">,</span> <span class="identifier">thread2</span><span class="special">);</span>
+<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">bith</span><span class="special">::</span><span class="identifier">conc_join_any</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">,</span> <span class="identifier">thread2</span><span class="special">);</span>
 </pre>
 <p>
           Evidently, thread_tuple can not be used when we need dynamic creation or
           deletion. The <code class="computeroutput"><span class="identifier">boots</span><span class="special">::</span><span class="identifier">thread_group</span></code> class allows to group dynamically
           threads.
         </p>
-<pre class="programlisting">
-<span class="special">{</span>
+<pre class="programlisting"><span class="special">{</span>
     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_group</span> <span class="identifier">tg</span><span class="special">;</span>
     <span class="identifier">tg</span><span class="special">.</span><span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">thread1</span><span class="special">);</span>
 
@@ -256,8 +242,7 @@
           in move-aware containers, and returned from functions. This allows the
           details of thread tuple creation to be wrapped in a function.
         </p>
-<pre class="programlisting">
-<span class="identifier">boost</span><span class="special">::</span><span class="identifier">interthreads</span><span class="special">::</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;</span> <span class="identifier">make_thread_tuple</span><span class="special">(...);</span>
+<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interthreads</span><span class="special">::</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;</span> <span class="identifier">make_thread_tuple</span><span class="special">(...);</span>
 
 <span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span>
 <span class="special">{</span>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,14 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Reference</title>
-<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../index.html" title="Toward Boost.InterThreads">
-<link rel="prev" href="users_guide/glosary.html" title=" Glossary">
-<link rel="next" href="reference/concepts.html" title="Concepts">
+<title>Reference</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="up" href="../index.html" title="Toward Boost.InterThreads 0.1.3">
+<link rel="prev" href="users_guide.html" title="Users'Guide">
+<link rel="next" href="appendices.html" title="Appendices">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -21,78 +20,2796 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="users_guide/glosary.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/concepts.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="users_guide.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="toward_boost_interthreads.reference"></a> Reference
+<a name="toward_boost_interthreads.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
 </h2></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section">Concepts</span></dt>
-<dd><dl><dt><span class="section">Decorator</span></dt></dl></dd>
-<dt><span class="section"><a href="reference/thread_decoration_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decoration</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl><dt><span class="section"><a href="reference/thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration">
- Class <code class="computeroutput"><span class="identifier">thread_decoration</span></code></a></span></dt></dl></dd>
-<dt><span class="section"><a href="reference/thread_decorator_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decorator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="reference/thread_decorator_hpp.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator">
- Class <code class="computeroutput"><span class="identifier">thread_decorator</span></code></a></span></dt>
-<dt><span class="section"><a href="reference/thread_decorator_hpp.html#toward_boost_interthreads.reference.thread_decorator_hpp.decorate">
- Non Member Function <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code></a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="reference/thread_specific_shared_ptr_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl><dt><span class="section"><a href="reference/thread_specific_shared_ptr_hpp.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr">
- Template Class <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
-<dt><span class="section"><a href="reference/keep_alive_file_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_keep_alive</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="reference/keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive">
- class <code class="computeroutput"><span class="identifier">enable_keep_alive</span></code></a></span></dt>
-<dt><span class="section"><a href="reference/keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive">
- class <code class="computeroutput"><span class="identifier">disable_keep_alive</span></code></a></span></dt>
-<dt><span class="section"><a href="reference/keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point">
- Non Member Function <code class="computeroutput"><span class="identifier">keep_alive_check_point</span><span class="special">()</span></code></a></span></dt>
-<dt><span class="section"><a href="reference/keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled">
- Non Member Function <code class="computeroutput"><span class="identifier">keep_alive_enabled</span><span class="special">()</span></code></a></span></dt>
-<dt><span class="section"><a href="reference/keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread">
- Non Member Function <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section">Concepts</span></dt>
+<dd><dl><dt><span class="section">Decorator</span></dt></dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decoration</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl><dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration">Class
+ <code class="computeroutput"><span class="identifier">thread_decoration</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decorator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator">Class
+ <code class="computeroutput"><span class="identifier">thread_decorator</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.decorate">Non
+ Member Function <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl><dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr">Template
+ Class <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_keep_alive</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">enable_keep_alive</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">disable_keep_alive</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_check_point</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_enabled</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread">Non
+ Member Function <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code></a></span></dt>
 </dl></dd>
-<dt><span class="section"><a href="reference/set_once_hpp.html"> Header
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.set_once_hpp">Header
       <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">set_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl><dt><span class="section"><a href="reference/set_once_hpp.html#toward_boost_interthreads.reference.set_once_hpp.set_onceclass">
- Template Class <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
-<dt><span class="section"><a href="reference/thread_tuple_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="reference/thread_tuple_hpp.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class">
- Template Class <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="reference/thread_tuple_hpp.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_make_thread_tuple">
- Non Member Function <code class="computeroutput"><span class="identifier">make_thread_tuple</span><span class="special">()</span></code></a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="reference/thread_tuple_once_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="reference/thread_tuple_once_hpp.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class">
- Template Class <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="reference/thread_tuple_once_hpp.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_make_thread_tuple_once">
- Non Member Function <code class="computeroutput"><span class="identifier">make_thread_tuple_once</span><span class="special">()</span></code></a></span></dt>
-</dl></dd>
-<dt><span class="section"><a href="reference/thread_group_once_hpp.html">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_group_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl>
-<dt><span class="section"><a href="reference/thread_group_once_hpp.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class">
- Template Class <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="reference/thread_group_once_hpp.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_make_thread_group_once">
- Non Member Function <code class="computeroutput"><span class="identifier">make_thread_group_once</span><span class="special">()</span></code></a></span></dt>
+<dd><dl><dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.set_once_hpp.set_onceclass">Template
+ Class <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class">Template
+ Class <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_make_thread_tuple">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_tuple</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class">Template
+ Class <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_make_thread_tuple_once">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_tuple_once</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_group_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class">Template
+ Class <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_make_thread_group_once">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_group_once</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+</dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.reference.concepts"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.concepts" title="Concepts">Concepts</a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">Decorator</span></dt></dl></div>
+<div class="section"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.concepts.decorator"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.concepts.decorator" title="Decorator">Decorator</a>
+</h4></div></div></div></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.reference.thread_decoration_hpp"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp" title="Header &lt;boost/interthreads/thread_decoration.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decoration</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration">Class
+ <code class="computeroutput"><span class="identifier">thread_decoration</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup">Constructor
+ with setup</a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup">Constructor
+ with setup &amp; cleanup</a></span></dt>
+</dl></dd>
+</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">interthreads</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">thread_decoration</span><span class="special">;</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration" title="Class thread_decoration">Class
+ <code class="computeroutput"><span class="identifier">thread_decoration</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup">Constructor
+ with setup</a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup">Constructor
+ with setup &amp; cleanup</a></span></dt>
+</dl></div>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_decoration</span></code> defines
+ a couple of setup/cleanup functions chained to the last constructed decoration,
+ i.e. decorations are chained between them.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">thread_decoration</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">&gt;</span>
+ <span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Callable2</span><span class="special">&gt;</span>
+ <span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">,</span> <span class="identifier">Callable2</span> <span class="identifier">cleanup</span><span class="special">);</span>
+
+ <span class="special">~</span><span class="identifier">thread_decoration</span><span class="special">()</span> <span class="special">{</span>
+<span class="special">};</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup" title="Constructor with setup">Constructor
+ with setup</a>
+</h5></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_decoration</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">Requires:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Callable</span></code> is <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>. Copying <code class="computeroutput"><span class="identifier">setup</span></code> shall have no side effects,
+ and the effect of calling the copy shall be equivalent to calling
+ the original.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">setup</span></code> is copied
+ into storage managed internally by the library, and that copy is
+ invoked by the <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code> function.
+ </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 a decoration.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ unsafe
+ </p></dd>
+</dl>
+</div>
+<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>
+ The library do not ensures any order of decorations.
+ </p></td></tr>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup" title="Constructor with setup &amp; cleanup">Constructor
+ with setup &amp; cleanup</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Callable2</span><span class="special">&gt;</span>
+<span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">,</span> <span class="identifier">Callable2</span> <span class="identifier">cleanup</span><span class="special">);</span>
+</pre>
+<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">Callable1</span></code> &amp;
+ <code class="computeroutput"><span class="identifier">Callable1</span></code> are
+ <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>.
+ Copying <code class="computeroutput"><span class="identifier">setup</span></code> or
+ <code class="computeroutput"><span class="identifier">cleanup</span></code> shall have
+ no side effects, and the effect of calling the copy shall be equivalent
+ to calling the original.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">setup</span></code> and <code class="computeroutput"><span class="identifier">cleanup</span></code> are copied into storage
+ managed internally by the library, and the <code class="computeroutput"><span class="identifier">setup</span></code>
+ copy is invoked by the <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code> function. If successful the cleanup
+ function is registered to the to the thread exit handler.
+ </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 a decoration.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ unsafe
+ </p></dd>
+</dl>
+</div>
+<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>
+ The library do not ensures any order of setup decorations neither of
+ cleanup decorations.
+ </p></td></tr>
+</table></div>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp" title="Header &lt;boost/interthreads/thread_decorator.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decorator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator">Class
+ <code class="computeroutput"><span class="identifier">thread_decorator</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_copy_move_constructor">Copy
+ Move Constructor</a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_copy_constructor">Assign
+ Move Constructor</a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_conversion">Member
+ Function <code class="computeroutput"><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_decorator</span><span class="special">&gt;()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_move">Member
+ Function <code class="computeroutput"><span class="identifier">move</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_swap">Member
+ Function <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_operator_f">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">()()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.decorate">Non
+ Member Function <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code></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">interthreads</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">thread_decorator</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">decorate</span><span class="special">();</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator" title="Class thread_decorator">Class
+ <code class="computeroutput"><span class="identifier">thread_decorator</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_copy_move_constructor">Copy
+ Move Constructor</a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_copy_constructor">Assign
+ Move Constructor</a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_conversion">Member
+ Function <code class="computeroutput"><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_decorator</span><span class="special">&gt;()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_move">Member
+ Function <code class="computeroutput"><span class="identifier">move</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_swap">Member
+ Function <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_operator_f">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">()()</span></code></a></span></dt>
+</dl></div>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_decorator</span></code> is a functor
+ wrapping a function with the setup and the cleanup of chained decorations
+ which will be called only once by thread: decoration's setup are called
+ before the thread function and decoration's cleanup at thread exit.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">thread_decorator</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Callable</span><span class="special">&gt;</span>
+ <span class="keyword">explicit</span> <span class="identifier">thread_decorator</span><span class="special">(</span><span class="identifier">Callable</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">Callable</span><span class="special">&gt;</span>
+ <span class="keyword">explicit</span> <span class="identifier">thread_decorator</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">Callable</span><span class="special">&gt;</span> <span class="identifier">f</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="identifier">thread_decorator</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">f</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">disable_if</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_convertible</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">&amp;,</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="special">&gt;</span>
+ <span class="special">,</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">dummy</span><span class="special">*</span> <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">=</span><span class="number">0</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">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A2</span><span class="special">,</span> <span class="special">...&gt;</span>
+ <span class="identifier">thread_decorator</span><span class="special">(</span><span class="identifier">Callable</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="special">...)</span>
+
+ <span class="identifier">thread_decorator</span><span class="special">(</span><span class="identifier">thread_decorator</span><span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+
+ <span class="identifier">thread_decorator</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">thread_decorator</span><span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+
+ <span class="identifier">thread_decorator</span><span class="special">&amp;&amp;</span> <span class="identifier">move</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread_decorator</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
+
+ <span class="keyword">void</span> <span class="keyword">operator</span> <span class="special">()();</span>
+
+<span class="special">};</span>
+</pre>
+<p>
+ Functor wrapping the user function thread to ensure that all the decorations
+ are called.
+ </p>
+<p>
+ Objects of type <code class="computeroutput"><span class="identifier">thread_decorator</span></code>
+ are movable, so they can be stored in move-aware containers, and returned
+ from functions. This allows the details of thread decoration to be wrapped
+ in a function.
+ </p>
+<pre class="programlisting"><span class="identifier">thread_decorator</span> <span class="identifier">make_decorator</span><span class="special">();</span>
+
+<span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">boot</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">some_thread</span><span class="special">(</span><span class="identifier">make_decorator</span><span class="special">());</span>
+ <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>
+ On compilers that support rvalue references, <code class="computeroutput"><span class="identifier">thread_decorator</span></code>
+ will provides a proper move constructor and move-assignment operator,
+ and therefore meets the C++0x <code class="computeroutput"><span class="identifier">MoveConstructible</span></code>
+ and <code class="computeroutput"><span class="identifier">MoveAssignable</span></code> concepts.
+ With such compilers, <code class="computeroutput"><span class="identifier">thread_decorator</span></code>
+ 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
+ <code class="computeroutput"><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">detail</span><span class="special">/</span><span class="identifier">move</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code> for details.
+ </p>
+</td></tr>
+</table></div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_constructor" title="Constructor">Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Callable</span><span class="special">&gt;</span>
+<span class="identifier">thread_decorator</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>
+<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_decorator</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">Template parameters:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Callable</span></code> must by
+ <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>.
+ </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 library, and that copy will
+ be invoked after the operator() function when the decorate is used
+ as Callable of a newly-created thread of execution.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_constructorn"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_constructorn" title="Constructor">Constructor</a>
+</h5></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">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A2</span><span class="special">,</span> <span class="special">...&gt;</span>
+<span class="identifier">thread_decorator</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">func</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="special">...)</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Template parameters:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Callable</span></code> must by
+ <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>.
+ </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 library, and that copy will
+ be invoked after the operator() function when the decorate is used
+ as Callable of a newly-created thread of execution.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe
+ </p></dd>
+<dt><span class="term">Limitations:</span></dt>
+<dd><p>
+ The current implementation defines overloads up to four parameters.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_copy_move_constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_copy_move_constructor" title="Copy Move Constructor">Copy
+ Move Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">thread_decorator</span><span class="special">(</span><span class="identifier">thread_decorator</span><span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+<span class="identifier">thread_decorator</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_decorator</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">)</span> <span class="special">{</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Template parameters:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Callable</span></code> must by
+ <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>.
+ </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 library, and that copy will
+ be invoked after the operator() function when the decorate is used
+ as Callable of a newly-created thread of execution.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_copy_constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_decorate_copy_constructor" title="Assign Move Constructor">Assign
+ Move Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">thread_decorator</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">thread_decorator</span><span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+<span class="identifier">thread_decorator</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_decorator</span><span class="special">&gt;</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">{</span>
+</pre>
+<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
+ <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>.
+ </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 library, and that copy will
+ be invoked after the operator() function when the decorate is used
+ as Callable of a newly-created thread of execution.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ a reference to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ neutral
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_conversion"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_conversion" title="Member Function operator detail::thread_move_t&lt;thread_decorator&gt;()">Member
+ Function <code class="computeroutput"><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_decorator</span><span class="special">&gt;()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><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_decorator</span><span class="special">&gt;();</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ helper for move semantics emulation.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ the move form <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ neutral
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_move"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_move" title="Member Function move()">Member
+ Function <code class="computeroutput"><span class="identifier">move</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><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_decorator</span><span class="special">&gt;</span> <span class="identifier">move</span><span class="special">()</span> <span class="special">{</span>
+<span class="identifier">thread_decorator</span><span class="special">&amp;&amp;</span> <span class="identifier">move</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>
+ Move *this to the caller.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ the move form <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ neutral
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_swap"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_swap" title="Member Function swap()">Member
+ Function <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread_decorator</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ neutral
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_operator_f"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.thread_decorator.decorator_thread_decoration_operator_f" title="Member Function operator()()">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">()()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="keyword">operator</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>
+ Functor operator
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Any exception thrown by the decorations or the user function.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ unsafe - depends on the decorations construction/destruction.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_decorator_hpp.decorate"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_decorator_hpp.decorate" title="Non Member Function decorate()">Non
+ Member Function <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">decorate</span><span class="special">();</span>
+</pre>
+<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> is <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>. Copying <code class="computeroutput"><span class="identifier">f</span></code> shall have no side effects, and
+ the effect of calling the copy shall be equivalent to calling the
+ original.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Calls every declared decoration using the thread_decoration class.
+ </p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ All the decorations have been called.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Any exception thrown by the decorations.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ unsafe - depends on the decorations construction/destruction.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp" title="Header &lt;boost/interthreads/thread_specific_shared_ptr.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr">Template
+ Class <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reference_parameters">Template
+ parameters</a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reference_types">Public
+ types</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_constructor_with_custom_cleanup">Cleanup
+ Constructor</a></span></dt>
+<dt><span class="section">Destructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_get">Member
+ Function <code class="computeroutput"><span class="identifier">get</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operator_arrow">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">-&gt;()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operator_star">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">*()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reset">Member
+ Function <code class="computeroutput"><span class="identifier">reset</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_wait_and_get">Member
+ Function <code class="computeroutput"><span class="identifier">wait_and_get</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operatora">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.get_mutex">Member
+ Function <code class="computeroutput"><span class="identifier">get_mutex</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.get_map">Member
+ Function <code class="computeroutput"><span class="identifier">get_map</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+</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">interthreads</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">thread_specific_shared_ptr</span><span class="special">;</span>
+
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr" title="Template Class thread_specific_shared_ptr&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reference_parameters">Template
+ parameters</a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reference_types">Public
+ types</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_constructor_with_custom_cleanup">Cleanup
+ Constructor</a></span></dt>
+<dt><span class="section">Destructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_get">Member
+ Function <code class="computeroutput"><span class="identifier">get</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operator_arrow">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">-&gt;()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operator_star">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">*()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reset">Member
+ Function <code class="computeroutput"><span class="identifier">reset</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_wait_and_get">Member
+ Function <code class="computeroutput"><span class="identifier">wait_and_get</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operatora">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.get_mutex">Member
+ Function <code class="computeroutput"><span class="identifier">get_mutex</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.get_map">Member
+ Function <code class="computeroutput"><span class="identifier">get_map</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ <code class="computeroutput"><span class="identifier">bith</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code>
+ is an extension of the thread_specific_ptr providing access to the thread
+ specific context from other threads.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">thread_specific_shared_ptr</span> <span class="special">:</span> <span class="keyword">private</span> <span class="identifier">noncopyable</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">shared_ptr_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="char">'implementation defined'</span> <span class="identifier">map_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="char">'implementation defined'</span> <span class="identifier">mutex_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="char">'implementation defined'</span> <span class="identifier">lock_type</span><span class="special">;</span>
+
+ <span class="identifier">thread_specific_shared_ptr</span><span class="special">();</span>
+ <span class="keyword">explicit</span> <span class="identifier">thread_specific_shared_ptr</span><span class="special">(</span><span class="keyword">void</span> <span class="special">(*</span><span class="identifier">cleanup_</span><span class="special">)(</span><span class="identifier">shared_ptr_type</span><span class="special">));</span>
+ <span class="special">~</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">();</span>
+
+ <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">();</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">d</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">d</span><span class="special">,</span> <span class="identifier">A</span> <span class="identifier">a</span><span class="special">);</span>
+
+ <span class="identifier">mutex_type</span><span class="special">&amp;</span> <span class="identifier">get_mutex</span><span class="special">();</span>
+ <span class="keyword">const</span> <span class="identifier">map_type</span><span class="special">&amp;</span> <span class="identifier">get_map</span><span class="special">(</span><span class="identifier">lock_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">shared_ptr_type</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">id</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">shared_ptr_type</span> <span class="identifier">wait_and_get</span><span class="special">(</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">id</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">private</span><span class="special">:</span>
+ <span class="identifier">shared_ptr_type</span> <span class="identifier">get_shared_ptr</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reference_parameters"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reference_parameters" title="Template parameters">Template
+ parameters</a>
+</h5></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code> is instantiated with the following
+ types:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+ T The type of the pointeed object
+ </li></ul></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reference_types"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reference_types" title="Public types">Public
+ types</a>
+</h5></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code> defines the following types:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">shared_ptr_type</span></code></strong></span>
+ The shared pointed type.
+ </li>
+<li class="listitem">
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">map_type</span></code></strong></span>
+ The mapping type from <code class="computeroutput"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code>
+ to <code class="computeroutput"><span class="identifier">shared_ptr_type</span></code>
+ </li>
+<li class="listitem">
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">mutex_type</span></code></strong></span>
+ The protecting mutext type follwing the Lockable Concept
+ </li>
+<li class="listitem">
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">lock_type</span></code></strong></span>
+ The lock used to get the map follwing the unique_lock subjacent Concept
+ </li>
+</ul></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_default_constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_default_constructor" title="Constructor">Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">thread_specific_shared_ptr</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>
+ Construct a <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code> object for storing a pointer
+ to an object of type <code class="computeroutput"><span class="identifier">T</span></code>
+ specific to each thread.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_constructor_with_custom_cleanup"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_constructor_with_custom_cleanup" title="Cleanup Constructor">Cleanup
+ Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">explicit</span> <span class="identifier">thread_specific_shared_ptr</span><span class="special">(</span><span class="keyword">void</span> <span class="special">(*</span><span class="identifier">cleanup_</span><span class="special">)(</span><span class="identifier">shared_ptr_type</span><span class="special">));</span>
+</pre>
+<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">cleanup_function</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">())</span></code> does not throw any exceptions.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Construct a <code class="computeroutput"><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code> object for storing a pointer
+ to an object of type <code class="computeroutput"><span class="identifier">T</span></code>
+ specific to each thread. The supplied <code class="computeroutput"><span class="identifier">cleanup_function</span></code>
+ will be called at thread exit.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_destructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_destructor" title="Destructor">Destructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">thread_specific_shared_ptr</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>
+ Remove from the static map the current thread::id and 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>
+ Nothing.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+<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>
+ Care needs to be taken to ensure that any threads still running after
+ an instance of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code> has been destroyed do not call
+ any member functions on that instance. Is for this raison that usualy
+ instance of this class are static.
+ </p></td></tr>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_get"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_get" title="Member Function get()">Member
+ Function <code class="computeroutput"><span class="identifier">get</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">shared_ptr_type</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</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 pointer associated with the current thread.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+<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>
+ The initial value associated with an instance of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_specific_shared_ptr</span><span class="special">&lt;&gt;</span></code> is <code class="computeroutput"><span class="number">0</span></code>
+ for each thread.
+ </p></td></tr>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operator_arrow"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operator_arrow" title="Member Function operator-&gt;()">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">-&gt;()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Requires:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()</span></code>
+ is not <code class="computeroutput"><span class="number">0</span></code>.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()</span></code>
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operator_star"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operator_star" title="Member Function operator*()">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">*()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Requires:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()</span></code>
+ is not <code class="computeroutput"><span class="number">0</span></code>.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="special">*(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">())</span></code>
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reset"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_reset" title="Member Function reset()">Member
+ Function <code class="computeroutput"><span class="identifier">reset</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">reset</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>
+ Equivalent to <code class="computeroutput"><span class="identifier">shared_ptr</span><span class="special">().</span><span class="identifier">swap</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_shared_ptr</span><span class="special">())</span></code>. Update the mapping.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()==</span><span class="number">0</span></code>
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">new_value</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>
+ Equivalent to <code class="computeroutput"><span class="identifier">shared_ptr</span><span class="special">(</span><span class="identifier">new_value</span><span class="special">).</span><span class="identifier">swap</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_shared_ptr</span><span class="special">())</span></code>. Update the mapping.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()==</span><span class="identifier">new_value</span></code>
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">new_value</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">deleter</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>
+ Equivalent to <code class="computeroutput"><span class="identifier">shared_ptr</span><span class="special">(</span><span class="identifier">new_value</span><span class="special">,</span> <span class="identifier">deleter</span><span class="special">).</span><span class="identifier">swap</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_shared_ptr</span><span class="special">())</span></code>. Update the mapping.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()==</span><span class="identifier">new_value</span></code>
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">new_value</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">deleter</span><span class="special">,</span> <span class="identifier">A</span> <span class="identifier">a</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>
+ Equivalent to <code class="computeroutput"><span class="identifier">shared_ptr</span><span class="special">(</span><span class="identifier">new_value</span><span class="special">,</span> <span class="identifier">deleter</span><span class="special">,</span> <span class="identifier">a</span><span class="special">).</span><span class="identifier">swap</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_shared_ptr</span><span class="special">())</span></code>. Update the mapping.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()==</span><span class="identifier">new_value</span></code>
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> when resources unavailable.
+ </p></dd>
+<dt><span class="term">Thread safety:</span></dt>
+<dd><p>
+ safe.
+ </p></dd>
+</dl>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ If <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()!=</span><span class="identifier">new_value</span></code> and <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()</span></code> is non-<code class="computeroutput"><span class="identifier">NULL</span></code>,
+ invoke <code class="computeroutput"><span class="keyword">delete</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">()</span></code> or <code class="computeroutput"><span class="identifier">deleter</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">())</span></code> as appropriate. Store <code class="computeroutput"><span class="identifier">new_value</span></code> as the pointer associated
+ with the current thread.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_wait_and_get"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_wait_and_get" title="Member Function wait_and_get()">Member
+ Function <code class="computeroutput"><span class="identifier">wait_and_get</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">shared_ptr_type</span> <span class="identifier">wait_and_get</span><span class="special">(</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">id</span><span class="special">)</span> <span class="keyword">const</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>
+ Waits until the specific shared pointer has been set and returns
+ a shared pointer to this context.
+ </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.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operatora"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.thread_specific_shared_ptr_operatora" title="Member Function operator[]()">Member
+ Function <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">shared_ptr_type</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">id</span><span class="special">)</span> <span class="keyword">const</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 a copy of the specific shared_ptr of the thread of execution
+ identified by the <code class="computeroutput"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code>.
+ </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="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.get_mutex"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.get_mutex" title="Member Function get_mutex()">Member
+ Function <code class="computeroutput"><span class="identifier">get_mutex</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">mutex_type</span><span class="special">&amp;</span> <span class="identifier">get_mutex</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 a reference to the protection mutex.
+ </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="toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.get_map"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_specific_shared_ptr_hpp.thread_specific_shared_ptr_reference_thread_specific_shared_ptr.get_map" title="Member Function get_map()">Member
+ Function <code class="computeroutput"><span class="identifier">get_map</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">const</span> <span class="identifier">map_type</span><span class="special">&amp;</span> <span class="identifier">get_map</span><span class="special">(</span><span class="identifier">lock_type</span><span class="special">&amp;)</span> <span class="keyword">const</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 a reference to the mapping from <code class="computeroutput"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code>
+ to the specific pointers provided the user gives a lock on the
+ motext get using <code class="computeroutput"><span class="identifier">get_mutex</span><span class="special">()</span></code>.
+ </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">
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp" title="Header &lt;boost/interthreads/thread_keep_alive.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_keep_alive</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">enable_keep_alive</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">disable_keep_alive</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
 </dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_check_point</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_enabled</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread">Non
+ Member Function <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ Includes the keep alive enabling/disabling classes and non member functions.
+ </p>
+<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">interthreads</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">this_thread</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">enable_keep_alive</span><span class="special">;</span>
+ <span class="keyword">class</span> <span class="identifier">disable_keep_alive</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">keep_alive_check_point</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">keep_alive_enabled</span><span class="special">();</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="special">(*</span><span class="identifier">on_dead_thread_type</span><span class="special">)(</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">set_on_dead_thread</span><span class="special">(</span><span class="identifier">on_dead_thread_type</span> <span class="identifier">fct</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive" title="class enable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">enable_keep_alive</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
 </dl></div>
+<p>
+ Keep alive enabler.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">enable_keep_alive</span> <span class="special">:</span> <span class="keyword">private</span> <span class="identifier">noncopyable</span><span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">enable_keep_alive</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">threshold</span><span class="special">=</span><span class="number">2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">tap</span><span class="special">=</span><span class="number">1</span><span class="special">);</span>
+ <span class="special">~</span><span class="identifier">enable_keep_alive</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Constructor" title="Constructor">Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">enable_keep_alive</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">threshold</span><span class="special">=</span><span class="number">2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">tap</span><span class="special">=</span><span class="number">1</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>
+ Enable the keep alive mechanism on this thread of execution.
+ </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="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Destructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Destructor" title="Destructor">Destructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">enable_keep_alive</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>
+ Restore the keep alive mechanism as it was before the constructor.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive" title="class disable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">disable_keep_alive</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
+</dl></div>
+<p>
+ Keep alive disabler.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">disable_keep_alive</span> <span class="keyword">private</span> <span class="identifier">noncopyable</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">disable_keep_alive</span><span class="special">();</span>
+ <span class="special">~</span><span class="identifier">disable_keep_alive</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Constructor" title="Constructor">Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">disable_keep_alive</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>
+ Disable the keep alive mechanism on this thread of execution.
+ </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="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Destructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Destructor" title="Destructor">Destructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">disable_keep_alive</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>
+ Restore the keep alive mechanism as it was before the constructor.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point" title="Non Member Function keep_alive_check_point()">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_check_point</span><span class="special">()</span></code></a>
+</h4></div></div></div>
+<p>
+ Keep alive check point.
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">keep_alive_check_point</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>
+ States that the current thread is alive.
+ </p></dd>
+<dt><span class="term">Postconditions:</span></dt>
+<dd><p>
+ The thread is alive.
+ </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><h4 class="title">
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled" title="Non Member Function keep_alive_enabled()">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_enabled</span><span class="special">()</span></code></a>
+</h4></div></div></div>
+<p>
+ Keep alive query.
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">keep_alive_enabled</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>
+ States if the keep alive mechanism is enabled on this thread.
+ </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><h4 class="title">
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread" title="Non Member Function set_on_dead_thread()">Non
+ Member Function <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code></a>
+</h4></div></div></div>
+<p>
+ Keep alive on dead thread action setting.
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">set_on_dead_thread</span><span class="special">(</span><span class="identifier">on_dead_thread_type</span> <span class="identifier">fct</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>
+ Modifies the action to be done when a this thread is declared dead.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.reference.set_once_hpp"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.set_once_hpp" title="Header &lt;boost/interthreads/set_once.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">set_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.set_once_hpp.set_onceclass">Template
+ Class <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code></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">interthreads</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">set_once</span><span class="special">;</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.set_once_hpp.set_onceclass"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.set_once_hpp.set_onceclass" title="Template Class set_once&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code>
+ is a synchonizer that allows to set a variable only once, notifying to
+ the variable value to whatever is waiting for that.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">set_once</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">value_type</span><span class="special">;</span>
+
+ <span class="identifier">set_once</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">wait</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&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">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">TimeDuration</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="identifier">value_type</span> <span class="identifier">get</span><span class="special">();</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">value_type</span><span class="special">&gt;</span> <span class="identifier">get_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&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">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">value_type</span><span class="special">&gt;</span> <span class="identifier">get_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">TimeDuration</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="keyword">bool</span> <span class="identifier">set_if_unassigned</span><span class="special">(</span><span class="identifier">value_type</span> <span class="identifier">id</span><span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">decorator</span><span class="special">(</span><span class="identifier">this_type</span><span class="special">&amp;</span> <span class="identifier">once</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fct</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="identifier">boost</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">make_thread</span><span class="special">(</span><span class="identifier">this_type</span><span class="special">&amp;</span> <span class="identifier">once</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fct</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp" title="Header &lt;boost/interthreads/thread_tuple.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class">Template
+ Class <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.template_parameters">Template
+ parameters</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_joinable">Member
+ function <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_join">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_all_until___">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_all_for___">Member
+ function <code class="computeroutput"><span class="identifier">join_all_for</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.join_first_then_interrupt">Member
+ function <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_any_until___">Member
+ function <code class="computeroutput"><span class="identifier">join_any_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.detach_all">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_interrupt_all">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_size">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_make_thread_tuple">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_tuple</span><span class="special">()</span></code></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">interthreads</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">thread_tuple</span><span class="special">;</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+ <span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;</span> <span class="identifier">make_thread_tuple</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">f0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">-</span><span class="number">1</span><span class="special">);</span>
+
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class" title="Template Class thread_tuple&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.template_parameters">Template
+ parameters</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_joinable">Member
+ function <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_join">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_all_until___">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_all_for___">Member
+ function <code class="computeroutput"><span class="identifier">join_all_for</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.join_first_then_interrupt">Member
+ function <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_any_until___">Member
+ function <code class="computeroutput"><span class="identifier">join_any_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.detach_all">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_interrupt_all">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_size">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code>
+ defines a thread groupe where the number of threads is know statically
+ and the threads are created at construction time.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">thread_tuple</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+ <span class="identifier">thread_tuple</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">f0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span> <span class="identifier">fn</span><span class="special">-</span><span class="number">1</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_tuple</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">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="special">~</span><span class="identifier">thread_tuple</span><span class="special">();</span>
+
+ <span class="comment">// move support
+</span> <span class="identifier">thread_tuple</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">x</span><span class="special">);</span>
+ <span class="identifier">thread_tuple</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">x</span><span class="special">);</span>
+ <span class="keyword">operator</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;();</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">move</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread_tuple</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&amp;</span> <span class="identifier">x</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_all</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">join_all_until</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">join_all_for</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">detach</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">detach_all</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">interrupt</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">interrupt_all</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="identifier">size_t</span> <span class="identifier">size</span><span class="special">();</span>
+
+ <span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">);</span>
+<span class="special">};</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code>
+ class is responsible for launching and managing a static collection of
+ threads that are related in some fashion. No new threads can be added to
+ the tuple once constructed.
+ </p>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.template_parameters"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.template_parameters" title="Template parameters">Template
+ parameters</a>
+</h5></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;</span></code>
+ is instantiated with the following value:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+ n is the size of the tuple.
+ </li></ul></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_callable_constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_callable_constructor" title="Constructor">Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+<span class="identifier">thread_tuple</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">func_0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span> <span class="identifier">func_n</span><span class="special">-</span><span class="number">1</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">Fk</span></code> must by copyable.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">func_k</span></code> is copied
+ into storage managed internally by the 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 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.
+ </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 tuple of threads of execution.
+ </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">Note:</span></dt>
+<dd><p>
+ Currently up to ten arguments <code class="computeroutput"><span class="identifier">func_0</span></code>
+ to <code class="computeroutput"><span class="identifier">funct_9</span></code> can
+ be specified.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_destructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_destructor" title="Destructor">Destructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">thread_tuple</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>
+ If *this have associateds thread of execution, calls detach() on
+ them. Destroys *this.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_joinable"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_joinable" title="Member function joinable()">Member
+ function <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code></a>
+</h5></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>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<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 threads of execution, <code class="computeroutput"><span class="keyword">false</span></code>
+ otherwise.
+ </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="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_join"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_join" title="Member function join_all()">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
+<span class="keyword">void</span> <span class="identifier">join_all</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>
+ Call <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the tuple.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;::</span><span class="identifier">join_all</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_all_until___"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_all_until___" title="Member function join_all_until()">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">join_all_until</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>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Call <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code> on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code>
+ object in the tuple.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ true if joined.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;::</span><span class="identifier">join_all_until</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_all_for___"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_all_for___" title="Member function join_all_for()">Member
+ function <code class="computeroutput"><span class="identifier">join_all_for</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><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">join_for</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>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ As <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">(</span><span class="identifier">now</span><span class="special">()+</span><span class="identifier">rel_time</span><span class="special">)</span></code>.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ true if joined.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_tuple</span><span class="special">&lt;&gt;::</span><span class="identifier">join_all_for</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.join_first_then_interrupt"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.join_first_then_interrupt" title="Member function join_any()">Member
+ function <code class="computeroutput"><span class="identifier">join_any</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">conc_join_any</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>
+ Call <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code>
+ on a temporary thread_tuple and the <code class="computeroutput"><span class="identifier">interrup_all</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code> is one of the predefined interruption
+ points, <code class="computeroutput"><span class="identifier">conc_join_any</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_any_until___"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.member_function__join_any_until___" title="Member function join_any_until()">Member
+ function <code class="computeroutput"><span class="identifier">join_any_until</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">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">conc_join_any_until</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="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">join_any_for</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>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Call <code class="computeroutput"><span class="identifier">join_any_until</span><span class="special">()</span></code> on a temporary thread_tuple and
+ the <code class="computeroutput"><span class="identifier">interrup_all</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ true if joined.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <code class="computeroutput"><span class="identifier">join_any_until</span><span class="special">()</span></code> is one of the predefined interruption
+ points, <code class="computeroutput"><span class="identifier">conc_join_any_until</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.detach_all"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.detach_all" title="Member function detach_all()">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">detach_all</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>
+ Call <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the tuple.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_interrupt_all"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_interrupt_all" title="Member function interrupt_all()">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">interrupt_all</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>
+ Call <code class="computeroutput"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">interrupt</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the tuple.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_size"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_class.thread_tuple_size" title="Member function size()">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">size</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 number of threads in the tuple.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_make_thread_tuple"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_hpp.thread_tuple_make_thread_tuple" title="Non Member Function make_thread_tuple()">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_tuple</span><span class="special">()</span></code></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">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+<span class="identifier">thread_tuple</span> <span class="identifier">make_thread_tuple</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">f0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">-</span><span class="number">1</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>
+ makes a new thread_tuple&lt;&gt;.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ the created thread tuple.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp" title="Header &lt;boost/interthreads/thread_tuple_once.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_tuple_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class">Template
+ Class <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.template_parameters">Template
+ parameters</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_joinable">Member
+ function <code class="computeroutput"><span class="identifier">joinables</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_join">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.member_function__join_all_until___">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.member_function__join_any___">Member
+ function <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.timed_join_first_then_interrupt">Member
+ function <code class="computeroutput"><span class="identifier">timed_join_first_then_interrupt</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.detach_all">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_interrupt_all">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_size">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_make_thread_tuple_once">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_tuple_once</span><span class="special">()</span></code></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">interthreads</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">thread_tuple_once</span><span class="special">;</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+ <span class="identifier">thread_tuple</span> <span class="identifier">make_thread_tuple_once</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">f0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">-</span><span class="number">1</span><span class="special">);</span>
+
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class" title="Template Class thread_tuple_once&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.template_parameters">Template
+ parameters</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_joinable">Member
+ function <code class="computeroutput"><span class="identifier">joinables</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_join">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.member_function__join_all_until___">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.member_function__join_any___">Member
+ function <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.timed_join_first_then_interrupt">Member
+ function <code class="computeroutput"><span class="identifier">timed_join_first_then_interrupt</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.detach_all">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_interrupt_all">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_size">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ <code class="computeroutput"><span class="identifier">biththread_tuple_once</span></code> is
+ an extension of the <code class="computeroutput"><span class="identifier">bith</span><span class="special">::</span><span class="identifier">thread_tuple</span></code>
+ which allows to join the thread finishing the first, using for that the
+ <code class="computeroutput"><span class="identifier">bith</span><span class="special">::</span><span class="identifier">set_once</span></code> synchronizer.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">thread_tuple_once</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+ <span class="identifier">thread_tuple_once</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">f0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span> <span class="identifier">fn</span><span class="special">-</span><span class="number">1</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_tuple_once</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">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="special">~</span><span class="identifier">thread_tuple_once</span><span class="special">();</span>
+
+ <span class="comment">// move support
+</span> <span class="identifier">thread_tuple_once</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_tuple_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">x</span><span class="special">);</span>
+ <span class="identifier">thread_tuple_once</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_tuple_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">x</span><span class="special">);</span>
+ <span class="keyword">operator</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_tuple_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;();</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_tuple_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">move</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread_tuple_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">);</span>
+
+ <span class="keyword">bool</span> <span class="identifier">joinables</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">join_all</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">join_all_until</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">join_all_for</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="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">join_any</span><span class="special">();</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">join_any_until</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="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">join_any_for</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">detach_all</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">interrupt_all</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="identifier">size_t</span> <span class="identifier">size</span><span class="special">();</span>
+
+ <span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">);</span>
+<span class="special">};</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The __thread_tuple<span class="underline">once</span>_ class is
+ responsible for launching and managing a static collection of threads that
+ are related in some fashion. No new threads can be added to the tuple once
+ constructed.
+ </p>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.template_parameters"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.template_parameters" title="Template parameters">Template
+ parameters</a>
+</h5></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;</span></code>
+ is instantiated with the following value:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+ n is the size of the tuple.
+ </li></ul></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_callable_constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_callable_constructor" title="Constructor">Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+<span class="identifier">thread_tuple_once</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">func_0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span> <span class="identifier">func_n</span><span class="special">-</span><span class="number">1</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">Fk</span></code> must by copyable.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">func_k</span></code> is copied
+ into storage managed internally by the 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 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.
+ </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 tuple of threads of execution.
+ </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">Note:</span></dt>
+<dd><p>
+ Currently up to ten arguments <code class="computeroutput"><span class="identifier">func_0</span></code>
+ to <code class="computeroutput"><span class="identifier">funct_9</span></code> can
+ be specified.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_destructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_destructor" title="Destructor">Destructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">thread_tuple_once</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>
+ If *this have associateds thread of execution, calls detach() on
+ them. Destroys *this.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_joinable"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_joinable" title="Member function joinables()">Member
+ function <code class="computeroutput"><span class="identifier">joinables</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">joinables</span><span class="special">()</span> <span class="keyword">const</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="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to threads of execution, <code class="computeroutput"><span class="keyword">false</span></code>
+ otherwise.
+ </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="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_join"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_join" title="Member function join_all()">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join_all</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>
+ Call <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the tuple.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;::</span><span class="identifier">join_all</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.member_function__join_all_until___"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.member_function__join_all_until___" title="Member function join_all_until()">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">join_all_until</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">join_all_for</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>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Call <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code> on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code>
+ object in the tuple.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ true if joined.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;::</span><span class="identifier">timed_join_all</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.member_function__join_any___"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.member_function__join_any___" title="Member function join_any()">Member
+ function <code class="computeroutput"><span class="identifier">join_any</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">join_any</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>
+ Call <code class="computeroutput"><span class="identifier">join_first</span><span class="special">()</span></code> and the <code class="computeroutput"><span class="identifier">interrup_all</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;::</span><span class="identifier">join_all</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.timed_join_first_then_interrupt"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.timed_join_first_then_interrupt" title="Member function timed_join_first_then_interrupt()">Member
+ function <code class="computeroutput"><span class="identifier">timed_join_first_then_interrupt</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">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">timed_join_first_then_interrupt</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="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">timed_join_first_then_interrupt</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>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Call <code class="computeroutput"><span class="identifier">timed_join_first</span><span class="special">()</span></code> and the <code class="computeroutput"><span class="identifier">interrup_all</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the tuple has terminated.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ true if joined.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_tuple_once</span><span class="special">&lt;&gt;::</span><span class="identifier">timed_join_all</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.detach_all"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.detach_all" title="Member function detach_all()">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">detach_all</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>
+ Call <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the tuple.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_interrupt_all"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_interrupt_all" title="Member function interrupt_all()">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">interrupt_all</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>
+ Call <code class="computeroutput"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">interrupt</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the tuple.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_size"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_class.thread_tuple_once_size" title="Member function size()">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">size</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 number of threads in the tuple.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_make_thread_tuple_once"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_tuple_once_hpp.thread_tuple_once_make_thread_tuple_once" title="Non Member Function make_thread_tuple_once()">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_tuple_once</span><span class="special">()</span></code></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">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+<span class="identifier">thread_tuple_once</span> <span class="identifier">make_thread_tuple_once</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">f0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">-</span><span class="number">1</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>
+ makes a new thread_tuple_once&lt;&gt;.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ the created thread tuple.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp" title="Header &lt;boost/interthreads/thread_group_once.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_group_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class">Template
+ Class <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_joinable">Member
+ function <code class="computeroutput"><span class="identifier">joinables</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_join">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_timed_join">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.join_first_then_interrupt">Member
+ function <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.timed_join_first_then_interrupt">Member
+ function <code class="computeroutput"><span class="identifier">join_any_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.detach_all">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.member_function__interrupt_all___">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_size">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_make_thread_group_once">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_group_once</span><span class="special">()</span></code></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">interthreads</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">thread_group</span><span class="special">;</span>
+
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class" title="Template Class thread_group_once&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_joinable">Member
+ function <code class="computeroutput"><span class="identifier">joinables</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_join">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_timed_join">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.join_first_then_interrupt">Member
+ function <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.timed_join_first_then_interrupt">Member
+ function <code class="computeroutput"><span class="identifier">join_any_until</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.detach_all">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.member_function__interrupt_all___">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_size">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;</span></code>
+ is an extension of the boost::thread_group which allows to join the thread
+ finishing the first, using for that the set_once synchronizer.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">thread_group_once</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">thread_group_once</span><span class="special">();</span>
+ <span class="special">~</span><span class="identifier">thread_group_once</span><span class="special">();</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">thread</span><span class="special">*</span> <span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">threadfunc</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">remove_thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">*</span> <span class="identifier">thrd</span><span class="special">);</span>
+
+ <span class="comment">// move support
+</span> <span class="identifier">thread_group_once</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_group_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">x</span><span class="special">);</span>
+ <span class="identifier">thread_group_once</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_group_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">x</span><span class="special">);</span>
+ <span class="keyword">operator</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_group_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;();</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">move_t</span><span class="special">&lt;</span><span class="identifier">thread_group_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&gt;</span> <span class="identifier">move</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread_group_once</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">);</span>
+
+ <span class="keyword">bool</span> <span class="identifier">joinables</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">join_all</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">join_all_until</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">join_all_for</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="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">join_any</span><span class="special">();</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">join_any_until</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="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">join_any_for</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">detach_all</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">interrupt_all</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="identifier">size_t</span> <span class="identifier">size</span><span class="special">();</span>
+
+ <span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">);</span>
+<span class="special">};</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_callable_constructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_callable_constructor" title="Constructor">Constructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">thread_group_once</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>
+ creates a thread group.
+ </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 group of threads of execution.
+ </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>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_destructor"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_destructor" title="Destructor">Destructor</a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">thread_group_once</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>
+ If *this have associateds thread of execution, calls detach() on
+ them. Destroys *this.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_joinable"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_joinable" title="Member function joinables()">Member
+ function <code class="computeroutput"><span class="identifier">joinables</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">joinables</span><span class="special">()</span> <span class="keyword">const</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="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to threads of execution, <code class="computeroutput"><span class="keyword">false</span></code>
+ otherwise.
+ </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="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_join"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_join" title="Member function join_all()">Member
+ function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join_all</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>
+ Call <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the group.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the group has terminated.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;::</span><span class="identifier">join_all</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_timed_join"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_timed_join" title="Member function join_all_until()">Member
+ function <code class="computeroutput"><span class="identifier">join_all_until</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">join_all_until</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">join_all_for</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>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Call <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code> on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code>
+ object in the group.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the group has terminated.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ true if joined.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;::</span><span class="identifier">timed_join_all</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.join_first_then_interrupt"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.join_first_then_interrupt" title="Member function join_any()">Member
+ function <code class="computeroutput"><span class="identifier">join_any</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">join_any</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>
+ Call <code class="computeroutput"><span class="identifier">join_any</span><span class="special">()</span></code>
+ and the <code class="computeroutput"><span class="identifier">interrup_all</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the group has terminated.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <code class="computeroutput"><span class="identifier">join_any</span></code>
+ is one of the predefined interruption points, <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;::</span><span class="identifier">join_any</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.timed_join_first_then_interrupt"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.timed_join_first_then_interrupt" title="Member function join_any_until()">Member
+ function <code class="computeroutput"><span class="identifier">join_any_until</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">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">join_any_until</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="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;</span> <span class="identifier">join_any_for</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>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ Call <code class="computeroutput"><span class="identifier">get_until</span><span class="special">()</span></code> and the <code class="computeroutput"><span class="identifier">interrup_all</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Postcondition:</span></dt>
+<dd><p>
+ Every thread in the group has terminated.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ true if joined.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing
+ </p></dd>
+<dt><span class="term">Note:</span></dt>
+<dd><p>
+ Since <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></code> is one of the predefined
+ interruption points, <code class="computeroutput"><span class="identifier">thread_group_once</span><span class="special">&lt;&gt;::</span><span class="identifier">timed_join_all</span><span class="special">()</span></code> is also an interruption point.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.detach_all"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.detach_all" title="Member function detach_all()">Member
+ function <code class="computeroutput"><span class="identifier">detach_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">detach_all</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>
+ Call <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the group.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.member_function__interrupt_all___"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.member_function__interrupt_all___" title="Member function interrupt_all()">Member
+ function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">interrupt_all</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>
+ Call <code class="computeroutput"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">interrupt</span><span class="special">()</span></code>
+ on each <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code> object in the group.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_size"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_class.thread_group_once_size" title="Member function size()">Member
+ function <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">size</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 number of threads in the group.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ Nothing.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_make_thread_group_once"></a><a class="link" href="reference.html#toward_boost_interthreads.reference.thread_group_once_hpp.thread_group_once_make_thread_group_once" title="Non Member Function make_thread_group_once()">Non
+ Member Function <code class="computeroutput"><span class="identifier">make_thread_group_once</span><span class="special">()</span></code></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">F0</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span>
+<span class="identifier">thread_group_once</span> <span class="identifier">make_thread_group_once</span><span class="special">(</span><span class="identifier">F0</span> <span class="identifier">f0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">-</span><span class="number">1</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>
+ makes a new thread_group_once&lt;&gt;.
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ the created thread group.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
 </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; 2008 -2009 Vicente J. Botet Escriba<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2008 -2009,2011 Vicente J. Botet Escriba<p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
         file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       </p>
@@ -100,7 +2817,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="users_guide/glosary.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/concepts.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="users_guide.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/concepts.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/concepts.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/concepts.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,15 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
 <title>Concepts</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../reference.html" title=" Reference">
-<link rel="prev" href="../reference.html" title=" Reference">
-<link rel="next" href="thread_decoration_hpp.html" title="
- Header &lt;boost/interthreads/thread_decoration.hpp&gt;">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="../reference.html" title="Reference">
+<link rel="next" href="thread_decoration_hpp.html" title="Header &lt;boost/interthreads/thread_decoration.hpp&gt;">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -24,13 +22,13 @@
 <div class="spirit-nav">
 <a accesskey="p" href="../reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="thread_decoration_hpp.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.reference.concepts"></a>Concepts
+<a name="toward_boost_interthreads.reference.concepts"></a><a class="link" href="concepts.html" title="Concepts">Concepts</a>
 </h3></div></div></div>
 <div class="toc"><dl><dt><span class="section">Decorator</span></dt></dl></div>
-<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.reference.concepts.decorator"></a>Decorator
+<div class="section"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_interthreads.reference.concepts.decorator"></a><a class="link" href="concepts.html#toward_boost_interthreads.reference.concepts.decorator" title="Decorator">Decorator</a>
 </h4></div></div></div></div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/keep_alive_file_hpp.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/keep_alive_file_hpp.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/keep_alive_file_hpp.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,17 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>
- Header &lt;boost/interthreads/thread_keep_alive.hpp&gt;</title>
+<title>Header &lt;boost/interthreads/thread_keep_alive.hpp&gt;</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../reference.html" title=" Reference">
-<link rel="prev" href="thread_specific_shared_ptr_hpp.html" title="
- Header &lt;boost/interthreads/thread_specific_shared_ptr.hpp&gt;">
-<link rel="next" href="set_once_hpp.html" title=" Header
- &lt;boost/interthreads/set_once.hpp&gt;">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="thread_specific_shared_ptr_hpp.html" title="Header &lt;boost/interthreads/thread_specific_shared_ptr.hpp&gt;">
+<link rel="next" href="set_once_hpp.html" title="Header &lt;boost/interthreads/set_once.hpp&gt;">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -26,273 +22,239 @@
 <div class="spirit-nav">
 <a accesskey="p" href="thread_specific_shared_ptr_hpp.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="set_once_hpp.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp"></a><a href="keep_alive_file_hpp.html" title="
- Header &lt;boost/interthreads/thread_keep_alive.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_keep_alive</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp"></a><a class="link" href="keep_alive_file_hpp.html" title="Header &lt;boost/interthreads/thread_keep_alive.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_keep_alive</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
 </h3></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive">
- class <code class="computeroutput"><span class="identifier">enable_keep_alive</span></code></a></span></dt>
+<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">enable_keep_alive</span></code></a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Constructor">
- Constructor</a></span></dt>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Destructor">
- Destructor</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
 </dl></dd>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive">
- class <code class="computeroutput"><span class="identifier">disable_keep_alive</span></code></a></span></dt>
+<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">disable_keep_alive</span></code></a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Constructor">
- Constructor</a></span></dt>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Destructor">
- Destructor</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
 </dl></dd>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point">
- Non Member Function <code class="computeroutput"><span class="identifier">keep_alive_check_point</span><span class="special">()</span></code></a></span></dt>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled">
- Non Member Function <code class="computeroutput"><span class="identifier">keep_alive_enabled</span><span class="special">()</span></code></a></span></dt>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread">
- Non Member Function <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_check_point</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_enabled</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread">Non
+ Member Function <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code></a></span></dt>
 </dl></div>
 <p>
         Includes the keep alive enabling/disabling classes and non member functions.
       </p>
-<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">interthreads</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">this_thread</span> <span class="special">{</span>
- <span class="keyword">class</span> <span class="identifier">enable_keep_alive</span><span class="special">;</span>
- <span class="keyword">class</span> <span class="identifier">disable_keep_alive</span><span class="special">;</span>
+<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">interthreads</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">this_thread</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">enable_keep_alive</span><span class="special">;</span>
+ <span class="keyword">class</span> <span class="identifier">disable_keep_alive</span><span class="special">;</span>
 
- <span class="keyword">void</span> <span class="identifier">keep_alive_check_point</span><span class="special">();</span>
- <span class="keyword">bool</span> <span class="identifier">keep_alive_enabled</span><span class="special">();</span>
- <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="special">(*</span><span class="identifier">on_dead_thread_type</span><span class="special">)(</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">);</span>
- <span class="keyword">void</span> <span class="identifier">set_on_dead_thread</span><span class="special">(</span><span class="identifier">on_dead_thread_type</span> <span class="identifier">fct</span><span class="special">);</span>
- <span class="special">}</span>
+ <span class="keyword">void</span> <span class="identifier">keep_alive_check_point</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">keep_alive_enabled</span><span class="special">();</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="special">(*</span><span class="identifier">on_dead_thread_type</span><span class="special">)(</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">set_on_dead_thread</span><span class="special">(</span><span class="identifier">on_dead_thread_type</span> <span class="identifier">fct</span><span class="special">);</span>
     <span class="special">}</span>
- <span class="special">}</span>
-<span class="special">=======]</span>
-
-<span class="identifier">I</span></pre>
-<div class="section" lang="en">
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive" title="
- class enable_keep_alive">
- class <code class="computeroutput"><span class="identifier">enable_keep_alive</span></code></a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive" title="class enable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">enable_keep_alive</span></code></a>
 </h4></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Constructor">
- Constructor</a></span></dt>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Destructor">
- Destructor</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
 </dl></div>
 <p>
           Keep alive enabler.
         </p>
-<pre class="programlisting">
- <span class="keyword">class</span> <span class="identifier">enable_keep_alive</span> <span class="special">:</span> <span class="keyword">private</span> <span class="identifier">noncopyable</span><span class="special">{</span>
- <span class="keyword">public</span><span class="special">:</span>
- <span class="identifier">enable_keep_alive</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">threshold</span><span class="special">=</span><span class="number">2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">tap</span><span class="special">=</span><span class="number">1</span><span class="special">);</span>
- <span class="special">~</span><span class="identifier">enable_keep_alive</span><span class="special">();</span>
- <span class="special">};</span>
-<span class="identifier">alive</span></pre>
-<div class="section" lang="en">
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">enable_keep_alive</span> <span class="special">:</span> <span class="keyword">private</span> <span class="identifier">noncopyable</span><span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">enable_keep_alive</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">threshold</span><span class="special">=</span><span class="number">2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">tap</span><span class="special">=</span><span class="number">1</span><span class="special">);</span>
+ <span class="special">~</span><span class="identifier">enable_keep_alive</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+<div class="section">
 <div class="titlepage"><div><div><h5 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Constructor"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Constructor" title="
- Constructor">
- Constructor</a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Constructor"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Constructor" title="Constructor">Constructor</a>
 </h5></div></div></div>
-<pre class="programlisting">
-<span class="identifier">enable_keep_alive</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">threshold</span><span class="special">=</span><span class="number">2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">tap</span><span class="special">=</span><span class="number">1</span><span class="special">);</span>
+<pre class="programlisting"><span class="identifier">enable_keep_alive</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">threshold</span><span class="special">=</span><span class="number">2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">tap</span><span class="special">=</span><span class="number">1</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>
- Enable the keep alive mechanism on this thread of execution.
- </p></dd>
+ Enable the keep alive mechanism on this thread of execution.
+ </p></dd>
 <dt><span class="term">Throws:</span></dt>
 <dd><p>
- Nothing
- </p></dd>
+ Nothing
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h5 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Destructor"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Destructor" title="
- Destructor">
- Destructor</a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Destructor"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.enable_keep_alive.keep_alive_enable_keep_alive_Destructor" title="Destructor">Destructor</a>
 </h5></div></div></div>
-<pre class="programlisting">
- <span class="special">~</span><span class="identifier">enable_keep_alive</span><span class="special">();</span>
-<span class="identifier">t</span></pre>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">enable_keep_alive</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>
- Restore the keep alive mechanism as it was before the constructor.
- </p></dd>
+ Restore the keep alive mechanism as it was before the constructor.
+ </p></dd>
 <dt><span class="term">Throws:</span></dt>
 <dd><p>
- Nothing
- </p></dd>
+ Nothing
+ </p></dd>
 </dl>
 </div>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive" title="
- class disable_keep_alive">
- class <code class="computeroutput"><span class="identifier">disable_keep_alive</span></code></a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive" title="class disable_keep_alive">class
+ <code class="computeroutput"><span class="identifier">disable_keep_alive</span></code></a>
 </h4></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Constructor">
- Constructor</a></span></dt>
-<dt><span class="section"><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Destructor">
- Destructor</a></span></dt>
+<dt><span class="section">Constructor</span></dt>
+<dt><span class="section">Destructor</span></dt>
 </dl></div>
 <p>
           Keep alive disabler.
         </p>
-<pre class="programlisting">
- <span class="keyword">class</span> <span class="identifier">disable_keep_alive</span> <span class="keyword">private</span> <span class="identifier">noncopyable</span> <span class="special">{</span>
- <span class="keyword">public</span><span class="special">:</span>
- <span class="identifier">disable_keep_alive</span><span class="special">();</span>
- <span class="special">~</span><span class="identifier">disable_keep_alive</span><span class="special">();</span>
- <span class="special">};</span>
-<span class="identifier">e</span><span class="special">&gt;&lt;</span><span class="identifier">ph</span></pre>
-<div class="section" lang="en">
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">disable_keep_alive</span> <span class="keyword">private</span> <span class="identifier">noncopyable</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">disable_keep_alive</span><span class="special">();</span>
+ <span class="special">~</span><span class="identifier">disable_keep_alive</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+<div class="section">
 <div class="titlepage"><div><div><h5 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Constructor"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Constructor" title="
- Constructor">
- Constructor</a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Constructor"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Constructor" title="Constructor">Constructor</a>
 </h5></div></div></div>
-<pre class="programlisting">
- <span class="identifier">disable_keep_alive</span><span class="special">();</span>
-<span class="identifier">i</span></pre>
+<pre class="programlisting"><span class="identifier">disable_keep_alive</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>
- Disable the keep alive mechanism on this thread of execution.
- </p></dd>
+ Disable the keep alive mechanism on this thread of execution.
+ </p></dd>
 <dt><span class="term">Throws:</span></dt>
 <dd><p>
- Nothing
- </p></dd>
+ Nothing
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h5 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Destructor"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Destructor" title="
- Destructor">
- Destructor</a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Destructor"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_disable_keep_alive.keep_alive_disable_keep_alive_Destructor" title="Destructor">Destructor</a>
 </h5></div></div></div>
-<pre class="programlisting">
- <span class="special">~</span><span class="identifier">disable_keep_alive</span><span class="special">();</span>
-<span class="special">:</span></pre>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">disable_keep_alive</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>
- Restore the keep alive mechanism as it was before the constructor.
- </p></dd>
+ Restore the keep alive mechanism as it was before the constructor.
+ </p></dd>
 <dt><span class="term">Throws:</span></dt>
 <dd><p>
- Nothing
- </p></dd>
+ Nothing
+ </p></dd>
 </dl>
 </div>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point" title="
- Non Member Function keep_alive_check_point()">
- Non Member Function <code class="computeroutput"><span class="identifier">keep_alive_check_point</span><span class="special">()</span></code></a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_check_point" title="Non Member Function keep_alive_check_point()">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_check_point</span><span class="special">()</span></code></a>
 </h4></div></div></div>
 <p>
           Keep alive check point.
         </p>
-<pre class="programlisting">
- <span class="keyword">void</span> <span class="identifier">keep_alive_check_point</span><span class="special">();</span>
-#</pre>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">keep_alive_check_point</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>
- States that the current thread is alive.
- </p></dd>
+ States that the current thread is alive.
+ </p></dd>
 <dt><span class="term">Postconditions:</span></dt>
 <dd><p>
- The thread is alive.
- </p></dd>
+ The thread is alive.
+ </p></dd>
 <dt><span class="term">Throws:</span></dt>
 <dd><p>
- Nothing
- </p></dd>
+ Nothing
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled" title="
- Non Member Function keep_alive_enabled()">
- Non Member Function <code class="computeroutput"><span class="identifier">keep_alive_enabled</span><span class="special">()</span></code></a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_enabled" title="Non Member Function keep_alive_enabled()">Non
+ Member Function <code class="computeroutput"><span class="identifier">keep_alive_enabled</span><span class="special">()</span></code></a>
 </h4></div></div></div>
 <p>
           Keep alive query.
         </p>
-<pre class="programlisting">
- <span class="keyword">bool</span> <span class="identifier">keep_alive_enabled</span><span class="special">();</span>
-<span class="identifier">a</span></pre>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">keep_alive_enabled</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>
- States if the keep alive mechanism is enabled on this thread.
- </p></dd>
+ States if the keep alive mechanism is enabled on this thread.
+ </p></dd>
 <dt><span class="term">Throws:</span></dt>
 <dd><p>
- Nothing
- </p></dd>
+ Nothing
+ </p></dd>
 </dl>
 </div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread"></a><a href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread" title="
- Non Member Function set_on_dead_thread()">
- Non Member Function <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code></a>
+<a name="toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread"></a><a class="link" href="keep_alive_file_hpp.html#toward_boost_interthreads.reference.keep_alive_file_hpp.keep_alive_keep_alive_set_on_dead_thread" title="Non Member Function set_on_dead_thread()">Non
+ Member Function <code class="computeroutput"><span class="identifier">set_on_dead_thread</span><span class="special">()</span></code></a>
 </h4></div></div></div>
 <p>
           Keep alive on dead thread action setting.
         </p>
-<pre class="programlisting">
- <span class="keyword">void</span> <span class="identifier">set_on_dead_thread</span><span class="special">(</span><span class="identifier">on_dead_thread_type</span> <span class="identifier">fct</span><span class="special">);</span>
-<span class="identifier">o</span></pre>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">set_on_dead_thread</span><span class="special">(</span><span class="identifier">on_dead_thread_type</span> <span class="identifier">fct</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>
- Modifies the action to be done when a this thread is declared dead.
- </p></dd>
+ Modifies the action to be done when a this thread is declared dead.
+ </p></dd>
 <dt><span class="term">Throws:</span></dt>
 <dd><p>
- Nothing
- </p></dd>
+ Nothing
+ </p></dd>
 </dl>
 </div>
 </div>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/set_once_hpp.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/set_once_hpp.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/set_once_hpp.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,17 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title> Header
- &lt;boost/interthreads/set_once.hpp&gt;</title>
+<title>Header &lt;boost/interthreads/set_once.hpp&gt;</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../reference.html" title=" Reference">
-<link rel="prev" href="keep_alive_file_hpp.html" title="
- Header &lt;boost/interthreads/thread_keep_alive.hpp&gt;">
-<link rel="next" href="thread_tuple_hpp.html" title="
- Header &lt;boost/interthreads/thread_tuple.hpp&gt;">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="keep_alive_file_hpp.html" title="Header &lt;boost/interthreads/thread_keep_alive.hpp&gt;">
+<link rel="next" href="thread_tuple_hpp.html" title="Header &lt;boost/interthreads/thread_tuple.hpp&gt;">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -26,35 +22,31 @@
 <div class="spirit-nav">
 <a accesskey="p" href="keep_alive_file_hpp.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="thread_tuple_hpp.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.reference.set_once_hpp"></a><a href="set_once_hpp.html" title=" Header
- &lt;boost/interthreads/set_once.hpp&gt;"> Header
+<a name="toward_boost_interthreads.reference.set_once_hpp"></a><a class="link" href="set_once_hpp.html" title="Header &lt;boost/interthreads/set_once.hpp&gt;">Header
       <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">set_once</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
 </h3></div></div></div>
-<div class="toc"><dl><dt><span class="section"><a href="set_once_hpp.html#toward_boost_interthreads.reference.set_once_hpp.set_onceclass">
- Template Class <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code></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">interthreads</span> <span class="special">{</span>
- <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
- <span class="keyword">class</span> <span class="identifier">set_once</span><span class="special">;</span>
- <span class="special">}</span>
- <span class="special">}</span>
-<span class="identifier">ase</span> <span class="identifier">ro</span></pre>
-<div class="section" lang="en">
+<div class="toc"><dl><dt><span class="section"><a href="set_once_hpp.html#toward_boost_interthreads.reference.set_once_hpp.set_onceclass">Template
+ Class <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code></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">interthreads</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">set_once</span><span class="special">;</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.reference.set_once_hpp.set_onceclass"></a><a href="set_once_hpp.html#toward_boost_interthreads.reference.set_once_hpp.set_onceclass" title="
- Template Class set_once&lt;&gt;">
- Template Class <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code></a>
+<a name="toward_boost_interthreads.reference.set_once_hpp.set_onceclass"></a><a class="link" href="set_once_hpp.html#toward_boost_interthreads.reference.set_once_hpp.set_onceclass" title="Template Class set_once&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code></a>
 </h4></div></div></div>
 <p>
           <code class="computeroutput"><span class="identifier">set_once</span><span class="special">&lt;&gt;</span></code>
           is a synchonizer that allows to set a variable only once, notifying to
           the variable value to whatever is waiting for that.
         </p>
-<pre class="programlisting">
-<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
 <span class="keyword">class</span> <span class="identifier">set_once</span> <span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
     <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">value_type</span><span class="special">;</span>
@@ -77,8 +69,7 @@
     <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
     <span class="keyword">static</span> <span class="identifier">boost</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">make_thread</span><span class="special">(</span><span class="identifier">this_type</span><span class="special">&amp;</span> <span class="identifier">once</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fct</span><span class="special">);</span>
 <span class="special">};</span>
-
-<span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">type</span></pre>
+</pre>
 </div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>

Modified: sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_decoration_hpp.html
==============================================================================
--- sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_decoration_hpp.html (original)
+++ sandbox/interthreads/libs/interthreads/doc/html/toward_boost_interthreads/reference/thread_decoration_hpp.html 2011-02-16 14:38:13 EST (Wed, 16 Feb 2011)
@@ -1,16 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>
- Header &lt;boost/interthreads/thread_decoration.hpp&gt;</title>
+<title>Header &lt;boost/interthreads/thread_decoration.hpp&gt;</title>
 <link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
-<link rel="start" href="../../index.html" title="Toward Boost.InterThreads">
-<link rel="up" href="../reference.html" title=" Reference">
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="../../index.html" title="Toward Boost.InterThreads">
+<link rel="up" href="../reference.html" title="Reference">
 <link rel="prev" href="concepts.html" title="Concepts">
-<link rel="next" href="thread_decorator_hpp.html" title="
- Header &lt;boost/interthreads/thread_decorator.hpp&gt;">
+<link rel="next" href="thread_decorator_hpp.html" title="Header &lt;boost/interthreads/thread_decorator.hpp&gt;">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -25,38 +22,35 @@
 <div class="spirit-nav">
 <a accesskey="p" href="concepts.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="thread_decorator_hpp.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="toward_boost_interthreads.reference.thread_decoration_hpp"></a><a href="thread_decoration_hpp.html" title="
- Header &lt;boost/interthreads/thread_decoration.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decoration</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+<a name="toward_boost_interthreads.reference.thread_decoration_hpp"></a><a class="link" href="thread_decoration_hpp.html" title="Header &lt;boost/interthreads/thread_decoration.hpp&gt;">Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interthreads</span><span class="special">/</span><span class="identifier">thread_decoration</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
 </h3></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration">
- Class <code class="computeroutput"><span class="identifier">thread_decoration</span></code></a></span></dt>
+<dt><span class="section"><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration">Class
+ <code class="computeroutput"><span class="identifier">thread_decoration</span></code></a></span></dt>
 <dd><dl>
-<dt><span class="section"><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup">
- Constructor with setup</a></span></dt>
+<dt><span class="section"><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup">Constructor
+ with setup</a></span></dt>
 <dt><span class="section"><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup">Constructor
           with setup &amp; cleanup</a></span></dt>
 </dl></dd>
 </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">interthreads</span> <span class="special">{</span>
- <span class="keyword">class</span> <span class="identifier">thread_decoration</span><span class="special">;</span>
- <span class="special">}</span>
- <span class="special">}</span>
-###<span class="identifier">a</span>#</pre>
-<div class="section" lang="en">
+<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">interthreads</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">thread_decoration</span><span class="special">;</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration"></a><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration" title="
- Class thread_decoration">
- Class <code class="computeroutput"><span class="identifier">thread_decoration</span></code></a>
+<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration"></a><a class="link" href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration" title="Class thread_decoration">Class
+ <code class="computeroutput"><span class="identifier">thread_decoration</span></code></a>
 </h4></div></div></div>
 <div class="toc"><dl>
-<dt><span class="section"><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup">
- Constructor with setup</a></span></dt>
+<dt><span class="section"><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup">Constructor
+ with setup</a></span></dt>
 <dt><span class="section"><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup">Constructor
           with setup &amp; cleanup</a></span></dt>
 </dl></div>
@@ -65,26 +59,23 @@
           a couple of setup/cleanup functions chained to the last constructed decoration,
           i.e. decorations are chained between them.
         </p>
-<pre class="programlisting">
- <span class="keyword">class</span> <span class="identifier">thread_decoration</span> <span class="special">{</span>
- <span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">&gt;</span>
- <span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">);</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Callable2</span><span class="special">&gt;</span>
- <span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">,</span> <span class="identifier">Callable2</span> <span class="identifier">cleanup</span><span class="special">);</span>
-
- <span class="special">~</span><span class="identifier">thread_decoration</span><span class="special">()</span> <span class="special">{</span>
- <span class="special">};</span>
-<span class="identifier">p</span> <span class="identifier">function</span></pre>
-<div class="section" lang="en">
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">thread_decoration</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">&gt;</span>
+ <span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Callable2</span><span class="special">&gt;</span>
+ <span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">,</span> <span class="identifier">Callable2</span> <span class="identifier">cleanup</span><span class="special">);</span>
+
+ <span class="special">~</span><span class="identifier">thread_decoration</span><span class="special">()</span> <span class="special">{</span>
+<span class="special">};</span>
+</pre>
+<div class="section">
 <div class="titlepage"><div><div><h5 class="title">
-<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup"></a><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup" title="
- Constructor with setup">
- Constructor with setup</a>
+<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup"></a><a class="link" href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.thread_decoration_class_constructor_setup" title="Constructor with setup">Constructor
+ with setup</a>
 </h5></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>
+<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_decoration</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span>
 </pre>
 <div class="variablelist">
@@ -92,30 +83,29 @@
 <dl>
 <dt><span class="term">Requires:</span></dt>
 <dd><p>
- <code class="computeroutput"><span class="identifier">Callable</span></code> is <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>. Copying <code class="computeroutput"><span class="identifier">setup</span></code> shall have no side effects,
- and the effect of calling the copy shall be equivalent to calling
- the original.
- </p></dd>
+ <code class="computeroutput"><span class="identifier">Callable</span></code> is <code class="computeroutput"><span class="identifier">CopyConstructible</span></code>. Copying <code class="computeroutput"><span class="identifier">setup</span></code> shall have no side effects,
+ and the effect of calling the copy shall be equivalent to calling
+ the original.
+ </p></dd>
 <dt><span class="term">Effects:</span></dt>
 <dd><p>
- <code class="computeroutput"><span class="identifier">setup</span></code> is copied into
- storage managed internally by the library, and that copy is invoked
- by the <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code>
- function.
- </p></dd>
+ <code class="computeroutput"><span class="identifier">setup</span></code> is copied
+ into storage managed internally by the library, and that copy is
+ invoked by the <code class="computeroutput"><span class="identifier">decorate</span><span class="special">()</span></code> function.
+ </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 a decoration.
- </p></dd>
+ <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ refers to a decoration.
+ </p></dd>
 <dt><span class="term">Throws:</span></dt>
 <dd><p>
- Nothing
- </p></dd>
+ Nothing
+ </p></dd>
 <dt><span class="term">Thread safety:</span></dt>
 <dd><p>
- unsafe
- </p></dd>
+ unsafe
+ </p></dd>
 </dl>
 </div>
 <div class="note"><table border="0" summary="Note">
@@ -128,46 +118,47 @@
             </p></td></tr>
 </table></div>
 </div>
-<div class="section" lang="en">
+<div class="section">
 <div class="titlepage"><div><div><h5 class="title">
-<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup"></a><a href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup" title="Constructor
- with setup &amp; cleanup">Constructor
+<a name="toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup"></a><a class="link" href="thread_decoration_hpp.html#toward_boost_interthreads.reference.thread_decoration_hpp.thread_decoration.constructor_with_setup___cleanup" title="Constructor with setup &amp; cleanup">Constructor
           with setup &amp; cleanup</a>
 </h5></div></div></div>
-<pre class="programlisting">
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Callable2</span><span class="special">&gt;</span>
- <span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">,</span> <span class="identifier">Callable2</span> <span class="identifier">cleanup</span><span class="special">);</span>
-<span class="identifier">de</span></pre>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Callable1</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">Callable2</span><span class="special">&gt;</span>
+<span class="identifier">thread_decoration</span><span class="special">(</span><span class="identifier">Callable1</span> <span class="identifier">setup</span><span class="special">,</span> <span class="identifier">Callable2</span> <span class="identifier">cleanup</span><span class="special">);</span>
+</pre>