Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r56299 - in sandbox/stm/branches/vbe/libs/stm/doc/html: . toward_boost_stm toward_boost_stm/appendices toward_boost_stm/overview toward_boost_stm/reference toward_boost_stm/users_guide
From: vicente.botet_at_[hidden]
Date: 2009-09-18 13:48:13


Author: viboes
Date: 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
New Revision: 56299
URL: http://svn.boost.org/trac/boost/changeset/56299

Log:
TBoost.Stm vbe
* Adding DRAFT documentation

Added:
   sandbox/stm/branches/vbe/libs/stm/doc/html/
   sandbox/stm/branches/vbe/libs/stm/doc/html/index.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/standalone_HTML.manifest (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/acknowledgements.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/appendix_e__tests.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/appendix_f__tickets.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/changes.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/implementation.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/rationale.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/todo.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/examples.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/overview/
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/overview.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/overview/intro.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/base_contention_manager_hpp.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/data_types_hpp.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/exceptions_hpp.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/language_like_hpp.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_bookkeeping_hpp.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_hpp.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_object_hpp.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/tx_ptr_hpp.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/ext_references.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/getting_started.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/glosary.html (contents, props changed)
   sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/tutorial.html (contents, props changed)

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/index.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/index.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,110 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Chapter 1. Toward.Boost.STM</title>
+<link rel="stylesheet" href="../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="next" href="toward_boost_stm/overview.html" title="Overview">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="toward_boost_stm/overview.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
+<div class="chapter" lang="en">
+<div class="titlepage"><div>
+<div><h2 class="title">
+<a name="boost.stm"></a>Chapter 1. Toward.Boost.STM</h2></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Justin E.</span> <span class="surname">Gottchlich</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Vicente J.</span> <span class="surname">Botet Escriba</span>
+</h3></div></div>
+<div><p class="copyright">Copyright © 2009 Justin E. Gottchlich</p></div>
+<div><p class="copyright">Copyright © 2009 Vicente J. Botet Escriba</p></div>
+<div><div class="legalnotice">
+<a name="id4810745"></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>
+</div></div>
+</div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section"> Overview</span></dt>
+<dd><dl><dt><span class="section"> Introduction</span></dt></dl></dd>
+<dt><span class="section"> Users'Guide</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="toward_boost_stm/users_guide/getting_started.html"> Getting
+ Started</a></span></dt>
+<dt><span class="section"> Tutorial</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"> Header <boost/stm/data_types.hpp></span></dt>
+<dt><span class="section"> Header <boost/stm/exceptions.hpp></span></dt>
+<dt><span class="section"><a href="toward_boost_stm/reference/transaction_hpp.html"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction</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_stm/reference/transaction_object_hpp.html"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction_object</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"> Header <boost/stm/tx_ptr.hpp></span></dt>
+<dt><span class="section"><a href="toward_boost_stm/reference/base_contention_manager_hpp.html">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">base_contention_manager</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_stm/reference/language_like_hpp.html"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">language_like</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_stm/reference/transaction_bookkeeping_hpp.html">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction_bookkeeping</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>
+<dt><span class="section">Appendices</span></dt>
+<dd><dl>
+<dt><span class="section"> Appendix A: History</span></dt>
+<dt><span class="section"> Appendix B: Rationale</span></dt>
+<dt><span class="section"><a href="toward_boost_stm/appendices/implementation.html"> Appendix
+ C: Implementation Notes</a></span></dt>
+<dt><span class="section"><a href="toward_boost_stm/appendices/acknowledgements.html"> Appendix
+ D: Acknowledgements</a></span></dt>
+<dt><span class="section"><a href="toward_boost_stm/appendices/appendix_e__tests.html">Appendix
+ E: Tests</a></span></dt>
+<dt><span class="section"><a href="toward_boost_stm/appendices/appendix_f__tickets.html">Appendix
+ F: Tickets</a></span></dt>
+<dt><span class="section"><a href="toward_boost_stm/appendices/todo.html"> Appendix E: Future
+ plans</a></span></dt>
+</dl></dd>
+</dl>
+</div>
+<div class="warning"><table border="0" summary="Warning">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../doc/html/images/warning.png"></td>
+<th align="left">Warning</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ STM is not a part of the Boost libraries.
+ </p></td></tr>
+</table></div>
+<p>
+ [/
+ </p>
+<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: September 18, 2009 at 17:16:32 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="toward_boost_stm/overview.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/standalone_HTML.manifest
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/standalone_HTML.manifest 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,26 @@
+index.html
+toward_boost_stm/overview.html
+toward_boost_stm/overview/intro.html
+toward_boost_stm/users_guide.html
+toward_boost_stm/users_guide/getting_started.html
+toward_boost_stm/users_guide/tutorial.html
+toward_boost_stm/users_guide/ext_references.html
+toward_boost_stm/users_guide/glosary.html
+toward_boost_stm/reference.html
+toward_boost_stm/reference/data_types_hpp.html
+toward_boost_stm/reference/exceptions_hpp.html
+toward_boost_stm/reference/transaction_hpp.html
+toward_boost_stm/reference/transaction_object_hpp.html
+toward_boost_stm/reference/tx_ptr_hpp.html
+toward_boost_stm/reference/base_contention_manager_hpp.html
+toward_boost_stm/reference/language_like_hpp.html
+toward_boost_stm/reference/transaction_bookkeeping_hpp.html
+toward_boost_stm/examples.html
+toward_boost_stm/appendices.html
+toward_boost_stm/appendices/changes.html
+toward_boost_stm/appendices/rationale.html
+toward_boost_stm/appendices/implementation.html
+toward_boost_stm/appendices/acknowledgements.html
+toward_boost_stm/appendices/appendix_e__tests.html
+toward_boost_stm/appendices/appendix_f__tickets.html
+toward_boost_stm/appendices/todo.html

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,79 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendices</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="prev" href="examples.html" title="Examples">
+<link rel="next" href="appendices/changes.html" title="Appendix A: History">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="examples.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendices/changes.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_stm.appendices"></a><a class="link" href="appendices.html" title="Appendices">Appendices</a>
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Appendix A: History</span></dt>
+<dt><span class="section"> Appendix B: Rationale</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="appendices/rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts">TM-Specific
+ Concepts</a></span></dt>
+<dt><span class="section"><a href="appendices/rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts">C++
+ and Library-Specific Concepts</a></span></dt>
+<dt><span class="section"><a href="appendices/rationale.html#toward_boost_stm.appendices.rationale.comparaison_with_other_stm_systems">Comparaison
+ with other STM systems</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="appendices/implementation.html"> Appendix
+ C: Implementation Notes</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="appendices/implementation.html#toward_boost_stm.appendices.implementation.why_there_is_a__if__0____rand___1_____else___preceding_the_for_on_the_atomi_macros_">Why
+ there is a <code class="computeroutput"><span class="keyword">if</span> <span class="special">(</span><span class="number">0</span> <span class="special">==</span> <span class="identifier">rand</span><span class="special">()+</span><span class="number">1</span><span class="special">)</span>
+ <span class="special">{}</span> <span class="keyword">else</span></code>
+ preceding the for on the atomi macros?</a></span></dt>
+<dt><span class="section">Cache</span></dt>
+</dl></dd>
+<dt><span class="section"><a href="appendices/acknowledgements.html"> Appendix
+ D: Acknowledgements</a></span></dt>
+<dt><span class="section"><a href="appendices/appendix_e__tests.html">Appendix
+ E: Tests</a></span></dt>
+<dd><dl><dt><span class="section">XXX</span></dt></dl></dd>
+<dt><span class="section"><a href="appendices/appendix_f__tickets.html">Appendix
+ F: Tickets</a></span></dt>
+<dt><span class="section"><a href="appendices/todo.html"> Appendix E: Future
+ plans</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="appendices/todo.html#toward_boost_stm.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_stm.appendices.todo.for_later_releases">For
+ later releases</a></span></dt>
+</dl></dd>
+</dl></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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="examples.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendices/changes.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/acknowledgements.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/acknowledgements.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix D: Acknowledgements</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="implementation.html" title="Appendix C: Implementation Notes">
+<link rel="next" href="appendix_e__tests.html" title="Appendix E: Tests">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="implementation.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendix_e__tests.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.appendices.acknowledgements"></a><a class="link" href="acknowledgements.html" title="Appendix D: Acknowledgements"> Appendix
+ D: Acknowledgements</a>
+</h3></div></div></div>
+<p>
+ TBC
+ </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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="implementation.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendix_e__tests.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/appendix_e__tests.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/appendix_e__tests.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,113 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix E: Tests</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="acknowledgements.html" title="Appendix D: Acknowledgements">
+<link rel="next" href="appendix_f__tickets.html" title="Appendix F: Tickets">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="acknowledgements.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendix_f__tickets.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.appendices.appendix_e__tests"></a><a class="link" href="appendix_e__tests.html" title="Appendix E: Tests">Appendix
+ E: Tests</a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">XXX</span></dt></dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.appendices.appendix_e__tests.xxx"></a><a class="link" href="appendix_e__tests.html#toward_boost_stm.appendices.appendix_e__tests.xxx" title="XXX">XXX</a>
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ kind
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Result
+ </p>
+ </th>
+<th>
+ <p>
+ Ticket
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ XXX
+ </p>
+ </td>
+<td>
+ <p>
+ compile
+ </p>
+ </td>
+<td>
+ <p>
+ XXX
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr></tbody>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="acknowledgements.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendix_f__tickets.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/appendix_f__tickets.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/appendix_f__tickets.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,129 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix F: Tickets</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="appendix_e__tests.html" title="Appendix E: Tests">
+<link rel="next" href="todo.html" title="Appendix E: Future plans">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="appendix_e__tests.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.appendices.appendix_f__tickets"></a><a class="link" href="appendix_f__tickets.html" 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>
+ feature
+ </p>
+ </td>
+<td>
+ <p>
+ v0.0#1
+ </p>
+ </td>
+<td>
+ <p>
+ boostify
+ </p>
+ </td>
+<td>
+ <p>
+ XXX
+ </p>
+ </td>
+<td>
+ <p>
+ Open
+ </p>
+ </td>
+<td>
+ <p>
+ See array_locker_tests
+ </p>
+ </td>
+<td>
+ <p>
+ v1.0
+ </p>
+ </td>
+</tr></tbody>
+</table></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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="appendix_e__tests.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/changes.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/changes.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,70 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix A: History</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<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">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../appendices.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.appendices.changes"></a><a class="link" href="changes.html" title="Appendix A: History"> Appendix A: History</a>
+</h3></div></div></div>
+<a name="toward_boost_stm.appendices.changes._emphasis_role__bold__version_0_1__xx_yy__2009__emphasis___emphasis_announcement_of_stm__emphasis_"></a><h5>
+<a name="id4885927"></a>
+ <a class="link" href="changes.html#toward_boost_stm.appendices.changes._emphasis_role__bold__version_0_1__xx_yy__2009__emphasis___emphasis_announcement_of_stm__emphasis_"><span class="bold"><strong>Version 0.1, XX YY, 2009</strong></span> <span class="emphasis"><em>Announcement of
+ STM</em></span></a>
+ </h5>
+<p>
+ <span class="bold"><strong>Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc"><li></ul></div>
+<p>
+ <span class="bold"><strong>Toolsets:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Tested with static library.
+ </li>
+<li>
+ Tested on cygwin gcc 3.4.6.
+ </li>
+</ul></div>
+<a name="toward_boost_stm.appendices.changes._emphasis_role__bold__tickets___emphasis_"></a><h5>
+<a name="id4886000"></a>
+ <a class="link" href="changes.html#toward_boost_stm.appendices.changes._emphasis_role__bold__tickets___emphasis_"><span class="bold"><strong>Tickets:</strong></span></a>
+ </h5>
+<p>
+ <span class="bold"><strong>v0.1#1: .</strong></span>
+ </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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../appendices.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/implementation.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/implementation.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,95 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<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.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<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: Acknowledgements">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rationale.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.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_stm.appendices.implementation.why_there_is_a__if__0____rand___1_____else___preceding_the_for_on_the_atomi_macros_">Why
+ there is a <code class="computeroutput"><span class="keyword">if</span> <span class="special">(</span><span class="number">0</span> <span class="special">==</span> <span class="identifier">rand</span><span class="special">()+</span><span class="number">1</span><span class="special">)</span>
+ <span class="special">{}</span> <span class="keyword">else</span></code>
+ preceding the for on the atomi macros?</a></span></dt>
+<dt><span class="section">Cache</span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.appendices.implementation.why_there_is_a__if__0____rand___1_____else___preceding_the_for_on_the_atomi_macros_"></a><a class="link" href="implementation.html#toward_boost_stm.appendices.implementation.why_there_is_a__if__0____rand___1_____else___preceding_the_for_on_the_atomi_macros_" title="Why there is a if (0 == rand()+1) {} else preceding the for on the atomi macros?">Why
+ there is a <code class="computeroutput"><span class="keyword">if</span> <span class="special">(</span><span class="number">0</span> <span class="special">==</span> <span class="identifier">rand</span><span class="special">()+</span><span class="number">1</span><span class="special">)</span>
+ <span class="special">{}</span> <span class="keyword">else</span></code>
+ preceding the for on the atomi macros?</a>
+</h4></div></div></div>
+<p>
+ The <code class="computeroutput"><span class="keyword">if</span> <span class="special">(</span><span class="number">0</span> <span class="special">==</span> <span class="identifier">rand</span><span class="special">()+</span><span class="number">1</span><span class="special">)</span>
+ <span class="special">{}</span> <span class="keyword">else</span></code>
+ expression in the preprocessor atomic macros is used to prevent for loop
+ errors in non-standard conforming C++ compilers. In these non-compliant
+ compilers, automatic objects constructed as index variables for the for
+ loop are leaked out beyond the scope of the for loop, incorrectly extending
+ the liveness of these variables. In order to correct this behavior, the
+ for loops that are not encapsulated within trys are wrapped within if statements.
+ The if statements and for loops naturally nest without delineated scope
+ (e.g., f, g) allowing programmers to execute single or multiple operations
+ based on their preference.
+ </p>
+<p>
+ (0 == rand()+1) always returns false and cannot be optimized away by an
+ optimizing compiler. By using an always false non-optimizable function
+ inside an if statement, a variable scope is generated that guarantees automatic
+ objects which are placed within these scopes are properly destroyed once
+ the scope is exited. These scopes properly terminate variables which would
+ otherwise be leaked in non-compliant for loop C++ compilers. The proper
+ termination of automatic auto_locks and transactions is necessary to release
+ acquired locks, terminate transactions and release transactional memory.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.appendices.implementation.cache"></a><a class="link" href="implementation.html#toward_boost_stm.appendices.implementation.cache" title="Cache">Cache</a>
+</h4></div></div></div>
+<a name="toward_boost_stm.appendices.implementation.cache.dispersed"></a><h6>
+<a name="id4889557"></a>
+ <a class="link" href="implementation.html#toward_boost_stm.appendices.implementation.cache.dispersed">Dispersed</a>
+ </h6>
+<a name="toward_boost_stm.appendices.implementation.cache.compact"></a><h6>
+<a name="id4889578"></a>
+ <a class="link" href="implementation.html#toward_boost_stm.appendices.implementation.cache.compact">Compact</a>
+ </h6>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rationale.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/rationale.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/rationale.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,1204 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix B: Rationale</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<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">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="changes.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.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>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts">TM-Specific
+ Concepts</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.optimistic_concurrency">Optimistic
+ concurrency</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.aci_transactions">ACI
+ transactions</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.stm_synchronization_types">STM
+ Synchronization Types</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.updating_policies">Updating
+ policies</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.conflict_detection">Conflict
+ Detection</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.consistency_checking_policies">Consistency
+ checking policies</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.consistency_versus_updating_policies_composition">Consistency
+ versus Updating policies composition</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.memory_granularity">Memory
+ Granularity</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.memory_rollback_capability">Memory
+ Rollback Capability</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.composable_transactions">Composable
+ transactions</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.contention_management">Contention
+ management</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.unrecoverable_transactions_to_manage_with_i_o">Unrecoverable
+ transactions to manage with I/O</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.lock_aware_transaction">Lock-aware
+ transaction</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts">C++
+ and Library-Specific Concepts</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.native_language_compatibility">Native
+ Language Compatibility</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.memory_management">Memory
+ Management</a></span></dt>
+<dt><span class="section">RAII</span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.exception_safety">Exception
+ Safety</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.move_semantics">Move
+ semantics</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.parametric_polymorphism_and_subtype_polymorphism">Parametric
+ Polymorphism and Subtype Polymorphism</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.language_like_atomic_transaction_macro_blocks">Language-like
+ atomic transaction macro blocks</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.comparaison_with_other_stm_systems">Comparaison
+ with other STM systems</a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts" title="TM-Specific Concepts">TM-Specific
+ Concepts</a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.optimistic_concurrency">Optimistic
+ concurrency</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.aci_transactions">ACI
+ transactions</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.stm_synchronization_types">STM
+ Synchronization Types</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.updating_policies">Updating
+ policies</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.conflict_detection">Conflict
+ Detection</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.consistency_checking_policies">Consistency
+ checking policies</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.consistency_versus_updating_policies_composition">Consistency
+ versus Updating policies composition</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.memory_granularity">Memory
+ Granularity</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.memory_rollback_capability">Memory
+ Rollback Capability</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.composable_transactions">Composable
+ transactions</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.contention_management">Contention
+ management</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.unrecoverable_transactions_to_manage_with_i_o">Unrecoverable
+ transactions to manage with I/O</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.lock_aware_transaction">Lock-aware
+ transaction</a></span></dt>
+</dl></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.optimistic_concurrency"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.optimistic_concurrency" title="Optimistic concurrency">Optimistic
+ concurrency</a>
+</h5></div></div></div></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.aci_transactions"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.aci_transactions" title="ACI transactions">ACI
+ transactions</a>
+</h5></div></div></div>
+<p>
+ Transactional memory was founded on the database ACID principle (atomic,
+ consistent, isolated and durable), except without the D [24].
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Transactions are atomic; the operations all commit or none of them
+ do.
+ </li>
+<li>
+ Transactions are consistent; transactions must begin and end in legal
+ memory states.
+ </li>
+<li>
+ Transactions are isolated; memory changes made within a transaction
+ are invisible until committed.
+ </li>
+</ul></div>
+<p>
+ The below example gives a basic introduction into TBoost.STM's transactional
+ framework and demonstrates TBoost.STM's ACI conformance.
+ </p>
+<pre class="programlisting"><span class="identifier">native_trans</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">global_int</span><span class="special">;</span>
+<span class="keyword">int</span> <span class="identifier">increment_global</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">atomic</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">global_int</span><span class="special">)++;</span>
+ <span class="identifier">val</span> <span class="special">=</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">read</span><span class="special">(</span><span class="identifier">global_int</span><span class="special">);</span>
+ <span class="special">}</span> <span class="identifier">end_atom</span>
+ <span class="keyword">return</span> <span class="identifier">val</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ In the above example, (A) both the t.write() and t.read() operations
+ function atomically or neither operations are performed. In addition,
+ (C) the transaction begins and ends in legal memory states, meaning global
+ int is guaranteed to be read correctly, preventing thread data races
+ from causing inconsistent results. Lastly, (I) the intermediate state
+ of the incremented global int is isolated until the transaction commits.
+ These three attributes fulfill TBoost.STM's conformance to the ACI principles.
+ The above example also gives a basic introduction into TBoost.STM's transactional
+ framework.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.stm_synchronization_types"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.stm_synchronization_types" title="STM Synchronization Types">STM
+ Synchronization Types</a>
+</h5></div></div></div>
+<p>
+ There are two ways STM systems synchronize memory:
+ </p>
+<div class="orderedlist"><ol type="1">
+<li>
+ using non-blocking mechanisms (lock-free) or
+ </li>
+<li>
+ using lock-based (or blocking) mechanisms.
+ </li>
+</ol></div>
+<p>
+ Non-blocking STM systems use atomic primitives, such as, compare-and-swap
+ (CAS) or load-linked and store-conditional (LL-SC), that do not lock
+ the STM system to perform their transactional operations. Lock-based
+ STM systems use locks, such as mutual exclusion locks, which lock the
+ STM system to perform some portion of their transactional operations.
+ </p>
+<p>
+ TBoost.STM is a lock-based STM system. At its core, TBoost.STM uses one
+ lock per thread to implement transactional reads and writes. This allows
+ multiple transactions to simultaneously read and write without blocking
+ other transactions' progress. When a transaction is committing, a global
+ locking strategy is used to temporarily block forward progress on all
+ transactions except the committing one. Once the committing transaction
+ completes, other transactions are allowed to resume their work. TBoost.STM's
+ lockbased strategy allows it to gain the performance benefits of a nonblocking
+ system, such that when transactions are not committing, the transactions
+ do not block each other and are guaranteed to make forward progress.
+ Yet TBoost.STM maintains the benefits of a lockbased system, enabling
+ it to perform commit-time invalidation, its primary consistency model
+ mechanism.
+ </p>
+<p>
+ Recent research shows lock-based STM systems outperform non-blocking
+ systems. Our own research shows that through TBoost.STM's design, scaling
+ concerns and other lock-based specific problems, such as deadlocking
+ and priority inversion, can be overcome with specific contention management
+ and conflict detection policies.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.updating_policies"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.updating_policies" title="Updating policies">Updating
+ policies</a>
+</h5></div></div></div>
+<p>
+ In any STM system, an updating protocol must be used to perform transactional
+ commits for writes. Updating policies determine how a transaction commits
+ its memory updates to global memory. Two general ways exist to perform
+ updating:
+ </p>
+<div class="orderedlist"><ol type="1">
+<li>
+ direct updating, which copies the original global memory state off
+ to the side and then writes directly to global memory, and
+ </li>
+<li>
+ deferred updating, which copies the original global memory off to the
+ side and the writes to the local copy.
+ </li>
+</ol></div>
+<p>
+ When a transaction of a direct updating system commits its changes, no
+ changes to global memory are made as the STM system has written directly
+ to global memory. When a transaction of a deferred updating system commits
+ its changes, it writes the local changes to global memory. When a direct
+ updating system aborts, it uses the original copy of memory to update
+ global memory, restoring it to its original state. When a deferred updating
+ system aborts, no changes to global memory are made as the STM system
+ has not written anything to global memory. One of TBoost.STM's novel
+ features is its implementation of both direct and deferred updating.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.conflict_detection"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.conflict_detection" title="Conflict Detection">Conflict
+ Detection</a>
+</h5></div></div></div>
+<p>
+ Conflict detection is the process of identifying when two or more transactions
+ conflict. Conflicts can exist when a transaction writes to memory that
+ another transaction then reads or writes (write after write, write after
+ read), or when a transaction reads memory that is then used in another
+ transaction's write (read after write). Unlimited readers, on the other
+ hand, can read the same piece of memory without any conflict (read after
+ read).
+ </p>
+<div class="table">
+<a name="id4886511"></a><p class="title"><b>Table 1.1. Comparaison with other STM systems</b></p>
+<div class="table-contents"><table class="table" summary="Comparaison with other STM systems">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Features</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>after write</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>after read</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>write</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>
+ <span class="bold"><strong>read</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>YES</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>NO</strong></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ Before determining how to handle a conflict, STM systems must determine
+ when they will detect conflicts. There are two primary ways to detect
+ conflicts:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Early conflict detection attempts to identify conflicts as soon as
+ a transaction reads or writes to memory.
+ </li>
+<li>
+ Late conflict detection attempts to identify conflicts some time after
+ the initial read or write.
+ </li>
+</ul></div>
+<p>
+ For direct updating, TBoost.STM implements a run-time configurable early
+ and late conflict detection mechanism. For deferred updating, TBoost.STM
+ only implements late conflict detection. The decision to have TBoost.STM
+ only support late conflict detection for deferred updating was made after
+ identifying numerous lost optimizations using early conflict detection
+ with deferred updating.
+ </p>
+<p>
+ Future work may lead to the implementation of early conflict detection
+ for deferred updating simply for symmetry.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.consistency_checking_policies"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.consistency_checking_policies" title="Consistency checking policies">Consistency
+ checking policies</a>
+</h5></div></div></div>
+<p>
+ An STM system can identify a conflict in two principal ways: through
+ validation or invalidation.
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Validation is the process a transaction performs on its own read and
+ write set to check itself for consistency.
+ </li>
+<li>
+ Invalidation is the process a transaction performs on other transaction's
+ read and write sets to check them for consistency.
+ </li>
+</ul></div>
+<p>
+ Validation strategies usually have the the transaction abort itself if
+ an inconsistency is found. Invalidation strategies usually do just the
+ opposite, aborting the other transactions if an inconsistency is found.
+ In addition, STM systems can use contention managers to determine how
+ best to behave when inconsistent transactions are identified.
+ </p>
+<p>
+ TBoost.STM currently implements consistency checking only through invalidation.
+ One of the next goals of TBoost.STM is to build run-time configuration
+ of consistency checking for both invalidation and validation, as it is
+ believed that both may be necessary for varying problems. This aside,
+ TBoost.STM is unique in that it is the first STM system to implement
+ commit-time invalidation. While other systems, such as RSTM, have implemented
+ invalidation, no other system implements commit-time invalidation.
+ </p>
+<p>
+ We believe TBoost.STM is the first commit-time invalidating system due
+ to commit-time invalidation being seemingly only possible in lock-based
+ STM systems and as lock-based STM systems are relatively new, other lock-based
+ systems not being far enough along to implement it yet. The two key differences
+ we focus on in this work between invalidation and validation are;
+ </p>
+<div class="orderedlist"><ol type="1">
+<li>
+ invalidation can save many wasted operations by early notification
+ of doomed transactions, whereas validation cannot and
+ </li>
+<li>
+ invalidation can detect true priority inversion, whereas validation
+ cannot
+ </li>
+</ol></div>
+<p>
+ (other significant differences exist, but are not discussed here).
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Fully validating systems must iterate through all transactional operations
+ and determine consistency only at commit-time. Thus, each transaction
+ must fully execute its transactional operations. A substantial amount
+ of work can be saved by an invalidating system which can flag doomed
+ transactions early, as shown in table 1. Table 1 details 4, 8 and 12
+ threaded runs for red-black trees, linked lists and hash tables in
+ TBoost.STM. While the percentage of operational savings decreases for
+ each benchmark as the structure size increases, the actual operational
+ savings improves. For example, if a linked list is inserting at the
+ end of a 1600 node list and receives an early termination notification
+ saving 50% of its operations, the savings gained is an 800 node iteration
+ and insert. Likewise, performing a 90% operations savings in a linked
+ list insert operation of size 100, saves only a 90 node iteration and
+ insert.
+ </li></ul></div>
+<p>
+ Furthermore, not shown in the tables here, due to space limitations,
+ is that abort percentages grow for each benchmark as the data structure
+ size increases. Thus, the number of aborts increases, resulting in an
+ even high amount of abort savings per benchmark. The increasing number
+ of aborts as the data structure grows is quite intuitive as longer running
+ transactions are more likely to incur collisions, especially while operating
+ on the same data structure.
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Priority inversion occurs in TM when a lower priority transaction causes
+ a higher priority transaction to abort. Furthermore, priority inversion
+ can be guaranteed to only abort true priority inverted transactions
+ in an invalidating system. However, validating systems can also build
+ priority inversion schemes, they simply must suffer penalties of potentially
+ aborting transactions unnecessarily. The following section gives concrete
+ examples of handling priority inversion in both validating and invalidating
+ models.
+ </li></ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.consistency_versus_updating_policies_composition"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.consistency_versus_updating_policies_composition" title="Consistency versus Updating policies composition">Consistency
+ versus Updating policies composition</a>
+</h5></div></div></div>
+<p>
+ While TBoost.STM benchmarks show that, deferred updating in our system
+ usually outperforms direct updating, this is not always the case. In
+ particular, direct updating eventually outperforms deferred updating
+ in TBoost.STM as the data structure size grows. With this in mind, we
+ believe that direct updating is useful for specific algorithms with highly
+ innate parallelism (such as hash tables). Likewise, we believe validation
+ may outperform invalidation for high thread counted uses. From these
+ conclusions, we believe final STM systems may be required to implement
+ direct updating, deferred updating, validation and invalidation, all
+ of which should be configurable at run-time and compile-time. By doing
+ this, each problem which demands a different four-way configuration can
+ be handled appropriately. Rather than attempting to build a single implementation
+ which solves all problems universally, the end resulting STM system will
+ handle each specific problem with the most appropriate configuration.
+ </p>
+<div class="table">
+<a name="id4886906"></a><p class="title"><b>Table 1.2. Consistency versus Updating policies composition</b></p>
+<div class="table-contents"><table class="table" summary="Consistency versus Updating policies composition">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Features</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Direct</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Deferred</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>Validation</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>
+ <span class="bold"><strong>Invalidation</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Not Yet Implemented</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>YES</strong></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.memory_granularity"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.memory_granularity" title="Memory Granularity">Memory
+ Granularity</a>
+</h5></div></div></div>
+<p>
+ STM systems must use a memory granularity size of either word or object
+ for transactions. Word memory granularity allows transactions to read
+ and write at the machine's architectural word size. Type memory granularity
+ allows transactions to read and write at the type level, usually controlled
+ by implementation of a transactional object cache. Object memory granularity
+ allows transactions to read and write at the object level, usually controlled
+ by implementation of a transactional object base class using subtype
+ polymorphism. TBoost.STM implements the latter, performing reads and
+ writes at the object level.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.memory_rollback_capability"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.memory_rollback_capability" title="Memory Rollback Capability">Memory
+ Rollback Capability</a>
+</h5></div></div></div>
+<p>
+ STM systems must implement memory rollback capabilities for aborted transactions.
+ Memory rollbacking restores the original state of memory in the event
+ a transaction aborts. There are three rollbacking aspects any STM system
+ must handle when implemented in an unmanaged language;
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ updates to global,
+ </li>
+<li>
+ allocated memory and
+ </li>
+<li>
+ deallocated memory.
+ </li>
+</ul></div>
+<p>
+ TBoost.STM handles rollbacking to global memory internally for both direct
+ and deferred updating, requiring no programmer-based code. However, allocated
+ and deallocated memory rollbacking require programmer-specific interfaces
+ to be used. These interfaces handle C++ memory operations in their native
+ capacity - new and delete - as well as their transactional memory capacity,
+ ensuring no memory is leaked nor deleted prematurely.
+ </p>
+<p>
+ Examples of this are presented in the following section.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.composable_transactions"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.composable_transactions" title="Composable transactions">Composable
+ transactions</a>
+</h5></div></div></div>
+<p>
+ Composition is the process of taking separate transactions and adding
+ them together to compose a larger single transaction. Composition is
+ a very important aspect of transactions as, unlike locks, transactions
+ can compose. Without a composable TM system, nested transactions each
+ act independently committing their state as they complete. This is highly
+ problematic if an outer transaction then aborts, as there may be no way
+ to rollback the state of a nested (and already committed) transaction.
+ Therefore, implementation of composable transactions is paramount to
+ any TM system which hopes to build large transactions.
+ </p>
+<p>
+ TBoost.STM implements composition via subsumption and is a closed nested
+ system. Composition via subsumption merges all nested transactional memory
+ of a single thread into the outer most active transaction of that same
+ thread. The outer transaction subsumes all the inner transactions' changes.
+ Once the outer transaction completes, all the transactional memory from
+ the nested transactions and their parent either commit or abort. TBoost.STM's
+ closed nesting system enables each nested transaction visibility into
+ its parent's transactional memory and vice versa, but does not allow
+ other transactions to see this intermediate state.
+ </p>
+<p>
+ Future versions of TBoost.STM will implement closed nested transactions.
+ </p>
+</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.contention_management"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.contention_management" title="Contention management">Contention
+ management</a>
+</h5></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.unrecoverable_transactions_to_manage_with_i_o"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.unrecoverable_transactions_to_manage_with_i_o" title="Unrecoverable transactions to manage with I/O">Unrecoverable
+ transactions to manage with I/O</a>
+</h5></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.tm_specific_concepts.lock_aware_transaction"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.tm_specific_concepts.lock_aware_transaction" title="Lock-aware transaction">Lock-aware
+ transaction</a>
+</h5></div></div></div></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts" title="C++ and Library-Specific Concepts">C++
+ and Library-Specific Concepts</a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.native_language_compatibility">Native
+ Language Compatibility</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.memory_management">Memory
+ Management</a></span></dt>
+<dt><span class="section">RAII</span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.exception_safety">Exception
+ Safety</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.move_semantics">Move
+ semantics</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.parametric_polymorphism_and_subtype_polymorphism">Parametric
+ Polymorphism and Subtype Polymorphism</a></span></dt>
+<dt><span class="section"><a href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.language_like_atomic_transaction_macro_blocks">Language-like
+ atomic transaction macro blocks</a></span></dt>
+</dl></div>
+<p>
+ This section briefly discusses some of the C++ and library-specific concepts
+ of TBoost.STM.
+ </p>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.native_language_compatibility"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.native_language_compatibility" title="Native Language Compatibility">Native
+ Language Compatibility</a>
+</h5></div></div></div>
+<p>
+ Native Language Compatibility. Some existing STM systems require specific
+ language extensions or compiler support for their proposed system to
+ work. Other systems instead violate native language pragmatics by reducing
+ or removing type-safety altogether. Yet other system's transactional
+ functionality is significantly reliant on the preprocessor.
+ </p>
+<p>
+ TBoost.STM is built with native language compatibility as a top priority
+ - as such, it does not require language extensions or violate natural
+ language semantics. Native language compatibility is a foremost concern
+ due to C++0x set to specifically resist language extensions [29]. While
+ in other languages, such as Java, STM systems which require language
+ extensions may be practical, within C++ this same approach seems unrealistic.
+ Thus, there is a very practical need for a native language ready STM
+ solution for C++.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.memory_management"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.memory_management" title="Memory Management">Memory
+ Management</a>
+</h5></div></div></div>
+<p>
+ For unmanaged languages like C++, STM designers can build memory managers
+ to control heap-based memory allocation and deallocation. While building
+ a memory manager is not necessary for STM systems, performance optimizations
+ can be achieved through such implementations. In particular, a key memory
+ observation for STM systems is that numerous allocations and deallocations
+ happen within transactions, irrespective of the memory design decisions.
+ As such, TBoost.STM provides a builtin templatized user-configurable
+ memory manager which generally yields 20% performance improvement over
+ direct calls to the default C++'s new and delete.
+ </p>
+<p>
+ As understood by most C++ experts, native new and delete operators in
+ C++ are multi-threaded safe, using mutex locks to guarantee memory is
+ retrieved and released in a safe manner for multiple contending threads.
+ Improving the performance of direct calls to C++'s new and delete in
+ a single-threaded application is relatively easy as a buffered free store
+ can be created which requires no locking mechanism, thus naturally increasing
+ performance. This same task is not quite as easy in a multi-threaded
+ environment. TBoost.STM improves the native performance of C++'s operator
+ new and delete by first implementing buffered allocations which naturally
+ perform faster than single allocations. Secondly, performance gains are
+ made by not relinquishing ownership of deallocated memory, making second-time
+ memory allocations faster than first-time allocations. These two aspects
+ enable TBoost.STM's memory manager to perform faster than C++'s native
+ new and delete operations.
+ </p>
+<p>
+ TBoost.STM also must lock around memory allocations and deallocations,
+ just as native C++ new and delete must, however, it can build a more
+ problem-specific implementation that would hinder a generalized C++ new
+ and delete if implemented on a global scale. The techniques used in TBoost.STM
+ are similar to those discussed in Bulka and Mayhew's, Efficient C++,
+ Chapter 7, Multi-threaded Memory Pooling. In C++ semantics, the performance
+ gains within TBoost.STM's memory manager can be thought of as the differences
+ between using an std::vector's push_back() iteratively compared to using
+ an std::vector's push_back() iteratively after calling reserve(), and
+ then continuing to reuse the allocated space to avoid performance penalties
+ of reallocations.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.raii"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.raii" title="RAII">RAII</a>
+</h5></div></div></div>
+<p>
+ An STM system needs a transaction interface to identify where transactions
+ begin, end and which operations are performed within the transaction.
+ TBoost.STM achieves this by implementing transactions as objects using
+ the Resource Acquisition Is Initialization (RAII) principle.
+ </p>
+<p>
+ RAII is a common concept in C++ when dealing with resources that need
+ to be both obtained and released, like opening and closing a file. RAII
+ uses the concept that if a resource is obtained it must be released even
+ if the programmer fails to do so. RAII's behavior is implemented per
+ class, usually requiring the destructor of the class to guarantee any
+ resources gathered in the lifetime of the object be released. A primary
+ benefit of RAII is its natively correct behavior in the event of exceptions.
+ If an exception occurs causing an RAII class instance to destruct, due
+ to stack unwinding, the deterministic destruction of the object is invoked.
+ The destructor then releases any resources previously collected. This
+ guarantees any object implementing RAII semantics will always release
+ resources it controls, irrespective of program flow (normal or abnormal).
+ </p>
+<p>
+ The TBoost.STM's transaction class is based on the RAII concept for two
+ primary reasons. First, C++ programmers implicitly understand stack based
+ (automatic) objects and their native RAII semantics. In fact, all of
+ C++'s Standard Template Library (STL) containers are implemented using
+ the RAII philosophy. Second, exceptions in C++ are not required to be
+ handled by the programmer as they are in other languages, like Java.
+ Using RAII for transactions ensures proper and guaranteed termination
+ of transactions regardless of program flow, a very important attribute
+ for correct transactional behavior.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.exception_safety"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.exception_safety" title="Exception Safety">Exception
+ Safety</a>
+</h5></div></div></div>
+<p>
+ TBoost.STM fulfills Abrahams' basic exception safety guarantee for deferred
+ updating, but cannot supply any exception safety guarantee for direct
+ updating. The basic guarantee for exception safety states that if an
+ exception is thrown, the operation may have side-effects but is in a
+ consistent state. The basic guarantee is less strict than the strong
+ guarantee which specifies if an exception is thrown there are no side-effects.
+ The highest level of exception safety, above the strong guarantee, is
+ the nothrow guarantee which disallows exceptions from being thrown entirely.
+ </p>
+<p>
+ Within deferred updating, TBoost.STM can only afford to implement the
+ basic guarantee because if memory is partially committed and then a user
+ exception is thrown, no original state exists for the already committed
+ memory. Therefore, already committed memory in a deferred updating system,
+ must stay committed since no reverted original state can be used to revert
+ the changes. To implement such a system would result in a substantial
+ performance degradation to the overall system, effectively doubling memory
+ size and copy operations. Due to these costs, a double-copy implementation
+ is not performed and the basic guarantee for deferred updating is deemed
+ acceptable.
+ </p>
+<p>
+ Within direct updating, memory updates are done immediately on global
+ memory, so transactions naturally achieve strong exception safety guarantees
+ for commits. Aborts within direct updating, however, invoke copy constructors
+ for restoration of the original global memory state. These copy constructors
+ can throw exceptions which then can lead to a partially restored global
+ state for aborted exceptions that are short-circuited by user-defined
+ copy constructor exceptions. As such, no exception safety guarantee can
+ be made for direct updating when used in C++, a downfall of the updating
+ policy.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.move_semantics"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.move_semantics" title="Move semantics">Move
+ semantics</a>
+</h5></div></div></div>
+<p>
+ We solve the problem of commit-time and abort-time exceptions by using
+ move semantics in place of copy semantics. The idea of moving is new
+ to C++ and will be available in the next version of the standard.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.parametric_polymorphism_and_subtype_polymorphism"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.parametric_polymorphism_and_subtype_polymorphism" title="Parametric Polymorphism and Subtype Polymorphism">Parametric
+ Polymorphism and Subtype Polymorphism</a>
+</h5></div></div></div>
+<p>
+ Type abstraction in C++ to create general purpose code can be achieved
+ in numerous ways. Some of these ways, such as the use of C++ template
+ classes and template functions (parametric polymorphism), as well as
+ inheritance (subtype polymorphism), are considered practical and robust
+ ways to build general purpose functionality while still ensuring a certain
+ degree of type-safety is maintained. C++ templates, also known as parametric
+ polymorphism, exhibit the same type-safety as if the general purpose
+ code was written specifically for the templated instantiated type. Inheritance,
+ on the other hand, reduces type-safety to some degree, but gains run-time
+ flexibility unachievable with C++ templates alone. Other mechanisms also
+ exist to create general purpose code, such as void pointers or preprocessor
+ macros, but are considered unsafe and error-prone [8] and thusly, not
+ used in TBoost.STM.
+ </p>
+<p>
+ TBoost.STM uses both parametric and subtype polymorphism throughout its
+ internal implementation and exposed interfaces. In cases where strict
+ type-safety can be achieved, C++ templates are used. In other cases where
+ exact type-safety cannot be achieved without reducing TBoost.STM's functionality,
+ inheritance is used. All of these factors considered, TBoost.STM is a
+ research library that requires type-safety to be a foremost concern,
+ as its usage would hampered if type-safety was relaxed in areas where
+ it could have been retained. As such, C++ templates are used due to their
+ retention of full type information, in cases where inheritance would
+ have also sufficed with a slight loss of type-safety.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.language_like_atomic_transaction_macro_blocks"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.language_like_atomic_transaction_macro_blocks" title="Language-like atomic transaction macro blocks">Language-like
+ atomic transaction macro blocks</a>
+</h5></div></div></div>
+<p>
+ Transactions allow an unlimited number of threads to execute their optimistic
+ critical sections. Transactions can perform their writes off to the side,
+ ensuring global memory is preserved until the transaction's atomic operations
+ are complete. To ensure conflicting transactions are identified and prevented,
+ transactions perform correctness verification immediately before committing.
+ The consistency checking performed by transactions ensures that transactions
+ that write to or read from the same memory are restricted in their concurrent
+ execution. The code below demonstrates three different implementations
+ for transactions from a library-based approach where x is shared memory
+ that must be synchronized.
+ </p>
+<p>
+ transaction with begin()/end():
+ </p>
+<pre class="programlisting"><span class="identifier">begin_transaction</span><span class="special">(</span><span class="identifier">t</span><span class="special">);</span>
+<span class="identifier">tx_write</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">val</span><span class="special">;</span>
+<span class="identifier">end_transaction</span><span class="special">(</span><span class="identifier">t</span><span class="special">);</span>
+</pre>
+<p>
+ transaction with automatic object:
+ </p>
+<pre class="programlisting"><span class="special">{</span>
+ <span class="identifier">transaction</span> <span class="identifier">t</span><span class="special">;</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">val</span><span class="special">;</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+<p>
+ language transaction:
+ </p>
+<pre class="programlisting"><span class="identifier">atomic</span> <span class="special">{</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">val</span><span class="special">;</span> <span class="special">}</span>
+</pre>
+<p>
+ Inspection of the above code reveals that begin_transaction() and end_transaction()
+ are susceptible to the problem when a thrown exception can interfere
+ with correct interface calls. As such, the begin_transaction() and end_transaction()
+ approach can be immediately discarded from further consideration. The
+ two remaining approaches, similar to the prior locking implementations,
+ use automatic objects and a language-like approach. An initial observable
+ difference between the two approaches is that the language approach has
+ a smaller programmatic footprint than the automatic object approach.
+ Furthermore, the automatic object approach introduces more programmatic
+ complexity for transactional retry mechanics and composed transactional
+ behaviors.
+ </p>
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.language_like_atomic_transaction_macro_blocks.pitfalls_in_transactional_execution_of_automatic_objects"></a><h6>
+<a name="id4887981"></a>
+ <a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.language_like_atomic_transaction_macro_blocks.pitfalls_in_transactional_execution_of_automatic_objects">Pitfalls
+ in Transactional Execution of Automatic Objects</a>
+ </h6>
+<p>
+ Transactions use optimistic critical sections which generally require
+ transactions be retried if they do not commit. As such, transactions
+ are usually implemented as loops which re-execute until they commit.
+ The code below illustrates the client code necessary to implement a basic
+ retry behavior for automatic objects and language-like transactions.
+ </p>
+<p>
+ automatic object transaction with retry:
+ </p>
+<pre class="programlisting"><span class="keyword">for</span> <span class="special">(</span><span class="identifier">transaction</span> <span class="identifier">t</span><span class="special">;</span> <span class="special">!</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">committed</span><span class="special">();</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">restart</span><span class="special">())</span> <span class="special">{</span>
+ <span class="keyword">try</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">val</span><span class="special">;</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span>
+ <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(...)</span> <span class="special">{}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ language-like transaction with retry:
+ </p>
+<pre class="programlisting"><span class="identifier">atomic</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">val</span><span class="special">;</span>
+<span class="special">}</span> <span class="identifier">end_atom</span>
+</pre>
+<p>
+ To complicate matters, some transactions must not implement a retry.
+ Failed subtransactions often require the entire transaction be re-executed
+ from the beginning. While the methods used to perform transactional retries
+ vary between TM implementations, TBoost.STM uses an exception-based approach
+ for all transactional interfaces. These TBoost.STM interfaces throw exceptions
+ if transactions are found to be inconsistent. Therefore, parent transactions
+ should use retry mechanics while their child transactions should not.
+ The code above shows the differences between an automatic object and
+ language-like implementation for parent and child transactions.
+ </p>
+<p>
+ automatic object:
+ </p>
+<pre class="programlisting"><span class="comment">// parent tx with automatic object:
+</span><span class="keyword">for</span> <span class="special">(</span><span class="identifier">transaction</span> <span class="identifier">t</span><span class="special">;</span> <span class="special">!</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">committed</span><span class="special">();</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">restart</span><span class="special">())</span> <span class="special">{</span>
+ <span class="keyword">try</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">-=</span> <span class="identifier">val</span><span class="special">;</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span>
+ <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(...)</span> <span class="special">{}</span>
+<span class="special">}</span>
+
+<span class="comment">// child tx with automatic object.
+</span><span class="keyword">void</span> <span class="identifier">foo</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">val</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">transaction</span> <span class="identifier">t</span><span class="special">;</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">y</span><span class="special">)</span> <span class="special">+=</span> <span class="identifier">val</span><span class="special">;</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+<p>
+ language-like transaction:
+ </p>
+<pre class="programlisting"><span class="comment">// parent tx with language-like transaction.
+</span><span class="identifier">atomic</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">-=</span> <span class="identifier">val</span><span class="special">;</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+<span class="special">}</span> <span class="identifier">end_atom</span>
+
+<span class="comment">// child tx with language-like transaction.
+</span><span class="keyword">void</span> <span class="identifier">foo</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">val</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">atomic</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">y</span><span class="special">)</span> <span class="special">+=</span> <span class="identifier">val</span><span class="special">;</span>
+ <span class="special">}</span> <span class="identifier">end_atom</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The retry mechanics' syntactic overhead for automatic objects is nearly
+ double that of the language-like semantics. The complexity of the additional
+ retry code is significant and exhibits a number of locations where programmer-induced
+ errors could be made. The key benefit of the language-like atomic syntax
+ is that its structure is identical for parent and nested transactions
+ and it behaves correctly when any transaction is used as a parent or
+ child (details to follow).
+ </p>
+<p>
+ While the automatic object syntax could also be created to be identical
+ for parent and nested transactions, the impact of creating such identical
+ behavior would result in an increase in the child transaction's code
+ size by 266% for single instruction transactions. The resulting increased
+ code size and complexity would increase the likelihood for programmer-induced
+ errors. For these reasons, a number of TM researchers have been in favor
+ of direct language integration of TM instead of API-only approaches.
+ </p>
+<a name="toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.language_like_atomic_transaction_macro_blocks.disadvantages_of_language_based_transactional_integration"></a><h6>
+<a name="id4888889"></a>
+ <a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.c___and_library_specific_concepts.language_like_atomic_transaction_macro_blocks.disadvantages_of_language_based_transactional_integration">Disadvantages
+ of Language Based Transactional Integration</a>
+ </h6>
+<p>
+ Unfortunately, there are a number of disadvantages to direct language-based
+ support for transactions. To begin, transactional memory is still in
+ the early stages of research investigation. A number of open TM questions
+ should be answered before transactions are integrated directly into high-level
+ languages. Some of the open questions for transactions are regarding
+ validation and invalidation consistency checking, fairness and priority-based
+ transactions, open and closed nesting, exception behavior within transactions,
+ lock-based and non-blocking solutions, and hardware-software transactional
+ communication. Furthermore, some TM problems, such as contention management
+ strategy selection, seem more naturally placed within libraries than
+ languages due to their continually evolving and workload-specific nature.
+ </p>
+<p>
+ In light of this, direct integration of TM into a programming language
+ today may lead to errors that are irreversible. These errors may have
+ long-term consequences for the language. Language based integrations
+ are also slow to emerge, even in languages that are quick to evolve,
+ such as Java. A language-based approach to TM may take several years
+ before it is available. Yet, the emergence of multi-core hardware is
+ rushing programmers to develop multithreaded applications today. Without
+ wide TM availability, the primary parallel programming construct used
+ today is locks. Parallel programming research experts unanimously agree
+ that finegrained locking alone leads to notoriously complex software
+ to implement and maintain.
+ </p>
+<p>
+ The culmination of the above points illustrate the need for an extensible,
+ simplified, parallel programming model today. Our language-like approach
+ provides such a solution for C++ that neither library-based automatic
+ objects nor language-based parallel abstractions alone can provide.
+ </p>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.appendices.rationale.comparaison_with_other_stm_systems"></a><a class="link" href="rationale.html#toward_boost_stm.appendices.rationale.comparaison_with_other_stm_systems" title="Comparaison with other STM systems">Comparaison
+ with other STM systems</a>
+</h4></div></div></div>
+<div class="table">
+<a name="id4888980"></a><p class="title"><b>Table 1.3. Comparaison
+ with other STM systems</b></p>
+<div class="table-contents"><table class="table" summary="Comparaison
+ with other STM systems">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Features</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>TBoost.STM</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>TL2</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>Lock-free</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>NO</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>YES</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>Lock-based</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>YES</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>NO</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>Validation</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>YES</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>??</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>Invalidation</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>YES</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>NO</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>Direct-Updating</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>
+ <span class="bold"><strong>Deferred-Updating</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>
+ <span class="bold"><strong>Word memory granulatity</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>NO</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>YES</strong></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>Object memory granulatity</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>NO</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>YES</strong></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="changes.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/todo.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/appendices/todo.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,257 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendix E: Future plans</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="appendix_f__tickets.html" title="Appendix F: Tickets">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="appendix_f__tickets.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.appendices.todo"></a><a class="link" href="todo.html" title="Appendix E: Future plans"> Appendix E: Future
+ plans</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="todo.html#toward_boost_stm.appendices.todo.tasks_to_do_before_review">Tasks
+ to do before review</a></span></dt>
+<dt><span class="section"><a href="todo.html#toward_boost_stm.appendices.todo.for_later_releases">For
+ later releases</a></span></dt>
+<dd><dl><dt><span class="section"><a href="todo.html#toward_boost_stm.appendices.todo.for_later_releases.more_recherch_needed">More
+ recherch needed</a></span></dt></dl></dd>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.appendices.todo.tasks_to_do_before_review"></a><a class="link" href="todo.html#toward_boost_stm.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_stm.appendices.todo.tasks_to_do_before_review.interface"></a><h6>
+<a name="id4889912"></a>
+ <a class="link" href="todo.html#toward_boost_stm.appendices.todo.tasks_to_do_before_review.interface">Interface</a>
+ </h6>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<span class="bold"><strong>DONE</strong></span> Adding transactional smart pointers.
+ </li>
+<li>
+ Allows to have non transactional_object participating on transactions
+ (separate the information related to a transactional object from the
+ object itself and add two pointers to transactional_object_cache one
+ to the object itself and the other to the transactional_object.
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Managing Movable and non CopyConstructible
+ types.
+ </li>
+</ul></div>
+<a name="toward_boost_stm.appendices.todo.tasks_to_do_before_review.boostifying_stm"></a><h6>
+<a name="id4889967"></a>
+ <a class="link" href="todo.html#toward_boost_stm.appendices.todo.tasks_to_do_before_review.boostifying_stm">Boostifying
+ STM</a>
+ </h6>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<span class="bold"><strong>DONE</strong></span> set boost directory architecture
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> name files in lowercase
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Add a config file with all the
+ configuration macros
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Add a stm file at the boost level
+ including all the STM interfaces
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Replace bit_vector by std::bitset
+ or boost::dynamic_bitset (BOOST_STM_BLOOM_FILTER_USE_DYNAMIC_BITSET)
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Replace Sleep by boost::this_thread::sleep
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Replace pthread_mutex by boost::mutex
+ </li>
+<li>
+ Replace THREAD_ID by boost::thread_id
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Provide a unique array/tuple locker
+ (Boost.Synchro)
+ </li>
+<li>
+ Replace var_auto_lock by boost::synchro::unique_array_locker
+ </li>
+<li>
+ Replace auto_lock by boost::synchro::unique_locker and redefine use_lock
+ macros
+ </li>
+<li>
+ use lock_guard when lock/unlock
+ </li>
+<li>
+ Adapt the pool to Boost.Pool
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Provide a thread specific shared
+ pointer (Boost.Interthreads)
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Provide a transparent initialization
+ (Boost.Interthreads)
+ </li>
+<li>
+ Replace thread specific access using the thread id by boost:interthreads::thread_specific_shared_ptr
+ </li>
+<li>
+ Replace the initialization to the library Boost.Interthreads (decorations
+ and decorators)
+ </li>
+<li>
+ Replace draco_move by boost::move and its emulation
+ </li>
+<li>
+ Replace vector_set and vector map by the respectives Boost.Container
+ flat_set and flat_map
+ </li>
+<li>
+ Replace blom_filter by the Boost.BlomFilter blom_filter
+ </li>
+</ul></div>
+<a name="toward_boost_stm.appendices.todo.tasks_to_do_before_review.implementation"></a><h6>
+<a name="id4890145"></a>
+ <a class="link" href="todo.html#toward_boost_stm.appendices.todo.tasks_to_do_before_review.implementation">Implementation</a>
+ </h6>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<span class="bold"><strong>DONE</strong></span> Separate the data that is global,
+ thread specific but shared to other threads using a lock, thread local
+ or specific to a transaction.
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Define access to these data using
+ functions
+ </li>
+<li>
+ Separate the interface from the implementation
+ </li>
+<li>
+ Group all the cache containers (Read,Write,Delete,New) in only one cache
+ in order to improve the lookup performance when using smart pointers.
+ </li>
+</ul></div>
+<a name="toward_boost_stm.appendices.todo.tasks_to_do_before_review.tests"></a><h6>
+<a name="id4890204"></a>
+ <a class="link" href="todo.html#toward_boost_stm.appendices.todo.tasks_to_do_before_review.tests">Tests</a>
+ </h6>
+<div class="itemizedlist"><ul type="disc"><li>
+ Add unit tests
+ </li></ul></div>
+<a name="toward_boost_stm.appendices.todo.tasks_to_do_before_review.documentation"></a><h6>
+<a name="id4890235"></a>
+ <a class="link" href="todo.html#toward_boost_stm.appendices.todo.tasks_to_do_before_review.documentation">Documentation</a>
+ </h6>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<span class="bold"><strong>DONE</strong></span> Create the empty files and set
+ the doc generation environement
+ </li>
+<li>
+ Write the Motivation section
+ </li>
+<li>
+ Write the Getting started section
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Write the Installation section
+ </li>
+<li>
+ Write the Tutorial section
+ </li>
+<li>
+ Write the Example section
+ </li>
+<li>
+ Write the Reference section
+ </li>
+<li>
+<span class="bold"><strong>DONE</strong></span> Write the Bibliography section
+ </li>
+<li>
+ Write the Glossary section
+ </li>
+<li>
+ Write the Rationale section
+ </li>
+<li>
+ Write the Implementation notes section
+ </li>
+<li>
+ Write the Acknowledgements section
+ </li>
+</ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.appendices.todo.for_later_releases"></a><a class="link" href="todo.html#toward_boost_stm.appendices.todo.for_later_releases" title="For later releases">For
+ later releases</a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="todo.html#toward_boost_stm.appendices.todo.for_later_releases.more_recherch_needed">More
+ recherch needed</a></span></dt></dl></div>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Integrate with STM test benchmarks as STAMP or STMBench7.
+ </li>
+<li>
+ Add close nested transactions.
+ </li>
+<li>
+ Allows configuration at compile-time and run-time.
+ </li>
+</ul></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.appendices.todo.for_later_releases.more_recherch_needed"></a><a class="link" href="todo.html#toward_boost_stm.appendices.todo.for_later_releases.more_recherch_needed" title="More recherch needed">More
+ recherch needed</a>
+</h5></div></div></div>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Mixing STM updating policies.
+ </li>
+<li>
+ Mixing STM consistency checking.
+ </li>
+</ul></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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="appendix_f__tickets.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/examples.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/examples.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,46 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Examples</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="prev" href="reference/transaction_bookkeeping_hpp.html" title="Header &lt;boost/stm/transaction_bookkeeping.hpp&gt;">
+<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>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/transaction_bookkeeping_hpp.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_stm.examples"></a><a class="link" href="examples.html" title="Examples">Examples</a>
+</h2></div></div></div>
+<p>
+ This section includes complete examples using the library.
+ </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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/transaction_bookkeeping_hpp.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendices.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/overview.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/overview.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,166 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Overview</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="prev" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="next" href="overview/intro.html" title="Introduction">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="overview/intro.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_stm.overview"></a><a class="link" href="overview.html" title="Overview"> Overview</a>
+</h2></div></div></div>
+<div class="toc"><dl><dt><span class="section"> Introduction</span></dt></dl></div>
+<a name="toward_boost_stm.overview.description"></a><h4>
+<a name="id4810667"></a>
+ <a class="link" href="overview.html#toward_boost_stm.overview.description">Description</a>
+ </h4>
+<p>
+ Transactional memory (TM) is a new parallel programming mechanism that reduces
+ the complexity of parallel programming. TM reduces parallel programming complexity
+ by abstracting away the necessary synchronization mechanisms from the parallel
+ code, allowing the programmer to write parallel applications without worry
+ of deadlocks, livelocks or race conditions.
+ </p>
+<p>
+ Transactional memory is an active research interest for many academic and industry
+ institutions with many open questions about its behavior.
+ </p>
+<p>
+ Boost.STM is a C++ lock-based software transactional memory (STM) library.
+ Our approach to STM is to use only native language semantics while implementing
+ the least intrusive, most type-safe object oriented solution possible.
+ </p>
+<p>
+ <span class="bold"><strong>Boost.STM</strong></span> provides:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Optimistic concurrency
+ </li>
+<li>
+ ACI transactions
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ Atomic: all or nothing
+ </li>
+<li>
+ Consistent: only legal memory states
+ </li>
+<li>
+ Isolated: other txes cannot see until committed
+ </li>
+</ul></div>
+</li>
+<li>
+ Language-like atomic transaction macro blocks
+ </li>
+<li>
+ Open-nested composable transactions
+ </li>
+<li>
+ Direct/deffered updating policies
+ </li>
+<li>
+ Validation/invalidation consistency checking policies
+ </li>
+<li>
+ Lock-aware transaction
+ </li>
+<li>
+ Contention management: Mechanism for transaction forward progress
+ </li>
+<li>
+ Unrecoverable transaction to manage with I/O
+ </li>
+</ul></div>
+<a name="toward_boost_stm.overview.how_to_use_this_documentation"></a><h4>
+<a name="id4810523"></a>
+ <a class="link" href="overview.html#toward_boost_stm.overview.how_to_use_this_documentation">How
+ to Use This Documentation</a>
+ </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>
+</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/html/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ In addition, notes such as this one specify non-essential information that
+ provides additional background or rationale.
+ </p></td></tr>
+</table></div>
+<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
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</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">bstm</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">;</span>
+</pre>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="overview/intro.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/overview/intro.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/overview/intro.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,80 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Introduction</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<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>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../overview.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../users_guide.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.overview.intro"></a><a class="link" href="intro.html" title="Introduction"> Introduction</a>
+</h3></div></div></div>
+<p>
+ Research in parallel programming has recently seen a flurry of attention.
+ Among the active research is a push for high-level languages to offer native
+ support for parallel programming primitives. The next version of C++ will
+ incorporate library support for threads, while numerous researchers are exploring
+ ways to extend C++ to support transactional memory (TM).
+ </p>
+<p>
+ A strength of C++ is its support for automatic objects. Rather than requiring
+ that parallel primitives be added directly to the language, automatic objects
+ in C++ can be used to implement much of their necessary infrastructure. The
+ automatic object approach is natural from a language perspective, provides
+ full algorithmic control to the end programmer, and demonstrates C++'s linguistic
+ elegance. The disadvantage of this approach is its added programmatic overhead.
+ Using only automatic objects, certain programming errors, such as accidental
+ scope removal and incorrectly programmed transactional retry behavior, can
+ arise.
+ </p>
+<p>
+ In light of this, there are unique trade-offs between language based and
+ library-based parallel primitives. Language-based solutions minimize syntactic
+ clutter which reduce programmer related errors, but are seemingly irreversible
+ and, if incorrect, can have crippling effects upon the language. Library-based
+ solutions increase programmer control and flexibility, but place substantial
+ pressure on the programmer to avoid minute programming errors. A good compromise
+ is a solution that behaves like a language extension, but is implemented
+ within a library. By implementing parallel primitives within a library that
+ uses language-like interfaces, programmer pressure is reduced, implementation
+ updates are seamless, and full programmer control is achieved through library
+ extensibility.
+ </p>
+<p>
+ TBoost.STM present such a language-like solution for C++ using generic library
+ coupled with a deliberate use of the preprocessor. The culmination of these
+ components facilitate a simple, yet powerful, parallel programming interface
+ in C++.
+ </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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../overview.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../users_guide.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,121 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Reference</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="prev" href="users_guide/glosary.html" title="Glossary">
+<link rel="next" href="reference/data_types_hpp.html" title="Header &lt;boost/stm/data_types.hpp&gt;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="users_guide/glosary.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference/data_types_hpp.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_stm.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Header <boost/stm/data_types.hpp></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__transaction_type_">Enum
+ <code class="computeroutput"><span class="identifier">transaction_type</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__latm_type_">Enum
+ <code class="computeroutput"><span class="identifier">latm_type</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__transaction_state_">Enum
+ <code class="computeroutput"><span class="identifier">transaction_state</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.typedef__thread_id_t_">Typedef
+ <code class="computeroutput"><span class="identifier">thread_id_t</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"> Header <boost/stm/exceptions.hpp></span></dt>
+<dd><dl><dt><span class="section"><a href="reference/exceptions_hpp.html#toward_boost_stm.reference.exceptions_hpp.class__aborted_transaction_exception_">Class
+ <code class="computeroutput"><span class="identifier">aborted_transaction_exception</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="reference/transaction_hpp.html"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction</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/transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_">Class
+ <code class="computeroutput"><span class="identifier">transaction</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="reference/transaction_object_hpp.html"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction_object</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/transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_">Abstract
+ Class <code class="computeroutput"><span class="identifier">base_transaction_object</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___">Template
+ Class <code class="computeroutput"><span class="identifier">transaction_object</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__native_trans___">Template
+ Class <code class="computeroutput"><span class="identifier">native_trans</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___">Template
+ Class <code class="computeroutput"><span class="identifier">transactional_object</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"> Header <boost/stm/tx_ptr.hpp></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__tx_obj___">Template
+ Class <code class="computeroutput"><span class="identifier">tx_obj</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__tx_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">tx_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__rd_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">rd_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__upgrd_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">upgrd_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__wr_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">wr_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__read_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">read_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__write_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">write_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/base_contention_manager_hpp.html">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">base_contention_manager</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/base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_">Abstract
+ Class <code class="computeroutput"><span class="identifier">base_contention_manager</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="reference/language_like_hpp.html"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">language_like</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/language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__atomic_">Macro
+ <code class="computeroutput"><span class="identifier">atomic</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__try_atomic_">Macro
+ <code class="computeroutput"><span class="identifier">try_atomic</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__use_atomic_">Macro
+ <code class="computeroutput"><span class="identifier">use_atomic</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__catch_before_retry_">Macro
+ <code class="computeroutput"><span class="identifier">catch_before_retry</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__before_retry_">Macro
+ <code class="computeroutput"><span class="identifier">before_retry</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__end_atom_">Macro
+ <code class="computeroutput"><span class="identifier">end_atom</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/transaction_bookkeeping_hpp.html">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction_bookkeeping</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/transaction_bookkeeping_hpp.html#toward_boost_stm.reference.transaction_bookkeeping_hpp.class__transaction_bookkeeping_">Class
+ <code class="computeroutput"><span class="identifier">transaction_bookkeeping</span></code></a></span></dt></dl></dd>
+</dl></div>
+<p>
+ The following section presents the major design components identified in the
+ background section and discusses how they are implemented within the TBoost.STM
+ library.
+ </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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="users_guide/glosary.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference/data_types_hpp.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/base_contention_manager_hpp.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/base_contention_manager_hpp.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,287 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header &lt;boost/stm/base_contention_manager.hpp&gt;</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="tx_ptr_hpp.html" title="Header &lt;boost/stm/tx_ptr.hpp&gt;">
+<link rel="next" href="language_like_hpp.html" title="Header &lt;boost/stm/language_like.hpp&gt;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tx_ptr_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="language_like_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp"></a><a class="link" href="base_contention_manager_hpp.html" title="Header &lt;boost/stm/base_contention_manager.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">base_contention_manager</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="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_">Abstract
+ Class <code class="computeroutput"><span class="identifier">base_contention_manager</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_destructor__base_contention_manager_">Virtual
+ destructor <code class="computeroutput"><span class="identifier">base_contention_manager</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_new_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_new</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_delete_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_delete</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_read_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_read</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_write_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_write</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_before_commit_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_before_commit</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__permission_to_abort_">Virtual
+ function <code class="computeroutput"><span class="identifier">permission_to_abort</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__allow_lock_to_abort_tx_">Virtual
+ function <code class="computeroutput"><span class="identifier">allow_lock_to_abort_tx</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__lock_sleep_time_">Virtual
+ function <code class="computeroutput"><span class="identifier">lock_sleep_time</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__perform_isolated_tx_wait_priority_promotion_">Virtual
+ function <code class="computeroutput"><span class="identifier">perform_isolated_tx_wait_priority_promotion</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__perform_irrevocable_tx_wait_priority_promotion_">Virtual
+ function <code class="computeroutput"><span class="identifier">perform_irrevocable_tx_wait_priority_promotion</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">stm</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">base_contention_manager</span><span class="special">;</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_" title="Abstract Class base_contention_manager">Abstract
+ Class <code class="computeroutput"><span class="identifier">base_contention_manager</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_destructor__base_contention_manager_">Virtual
+ destructor <code class="computeroutput"><span class="identifier">base_contention_manager</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_new_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_new</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_delete_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_delete</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_read_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_read</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_write_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_write</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_before_commit_">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_before_commit</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__permission_to_abort_">Virtual
+ function <code class="computeroutput"><span class="identifier">permission_to_abort</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__allow_lock_to_abort_tx_">Virtual
+ function <code class="computeroutput"><span class="identifier">allow_lock_to_abort_tx</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__lock_sleep_time_">Virtual
+ function <code class="computeroutput"><span class="identifier">lock_sleep_time</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__perform_isolated_tx_wait_priority_promotion_">Virtual
+ function <code class="computeroutput"><span class="identifier">perform_isolated_tx_wait_priority_promotion</span></code></a></span></dt>
+<dt><span class="section"><a href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__perform_irrevocable_tx_wait_priority_promotion_">Virtual
+ function <code class="computeroutput"><span class="identifier">perform_irrevocable_tx_wait_priority_promotion</span></code></a></span></dt>
+</dl></div>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">base_contention_manager</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">abort_on_new</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">abort_on_delete</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">in</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">abort_on_read</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">in</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">abort_on_write</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">in</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">abort_before_commit</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">permission_to_abort</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">lhs</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">allow_lock_to_abort_tx</span><span class="special">(</span>
+ <span class="keyword">int</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">lockWaitTime</span><span class="special">,</span>
+ <span class="keyword">int</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">lockAborted</span><span class="special">,</span>
+ <span class="keyword">bool</span> <span class="identifier">txIsIrrevocable</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">int</span> <span class="identifier">lock_sleep_time</span><span class="special">();</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">perform_isolated_tx_wait_priority_promotion</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="special">&amp;)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">perform_irrevocable_tx_wait_priority_promotion</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="special">&amp;)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">base_contention_manager</span><span class="special">()</span> <span class="special">{};</span>
+<span class="special">};</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_destructor__base_contention_manager_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_destructor__base_contention_manager_" title="Virtual destructor base_contention_manager">Virtual
+ destructor <code class="computeroutput"><span class="identifier">base_contention_manager</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">base_contention_manager</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_new_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_new_" title="Virtual function abort_on_new">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_new</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">abort_on_new</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ Supplies the behavior for transactional aborts when identified as doomed
+ from within a <code class="computeroutput"><span class="identifier">new_memory</span><span class="special">()</span></code> or <code class="computeroutput"><span class="identifier">new_memory_copy</span><span class="special">()</span></code> operation. The input parameter is the
+ doomed transaction. Throwing <code class="computeroutput"><span class="identifier">aborted_transaction_exceptions</span></code>
+ are the usual mechanism for aborting.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_delete_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_delete_" title="Virtual function abort_on_delete">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_delete</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">abort_on_delete</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">in</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ Supplies the behavior for transactional aborts when identified as doomed
+ from within a <code class="computeroutput"><span class="identifier">delete_memory</span><span class="special">()</span></code> operation. The input parameters are
+ the doomed transaction and the object being deleted. Throwing <code class="computeroutput"><span class="identifier">aborted_transaction_exceptions</span></code> are
+ the usual mechanism for aborting.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_read_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_read_" title="Virtual function abort_on_read">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_read</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">abort_on_read</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">in</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ Supplies the behavior for transactional aborts when identified as doomed
+ from within a <code class="computeroutput"><span class="identifier">read</span><span class="special">()</span></code>
+ operation. The input parameters are the doomed transaction and the object
+ being read. Throwing <code class="computeroutput"><span class="identifier">aborted_transaction_exceptions</span></code>
+ are the usual mechanism for aborting.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_write_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_on_write_" title="Virtual function abort_on_write">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_on_write</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">abort_on_write</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">in</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ Supplies the behavior for transactional aborts when identified as doomed
+ from within a <code class="computeroutput"><span class="identifier">write</span><span class="special">()</span></code>
+ operation. The input parameters are the doomed transaction and the object
+ being written. Throwing <code class="computeroutput"><span class="identifier">aborted_transaction_exceptions</span></code>
+ are the usual mechanism for aborting.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_before_commit_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__abort_before_commit_" title="Virtual function abort_before_commit">Virtual
+ function <code class="computeroutput"><span class="identifier">abort_before_commit</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">abort_before_commit</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ This method is called prior to a transaction performing its commit operation.
+ The parameter passed in is the transaction preparing to commit. The client
+ code should return <code class="computeroutput"><span class="keyword">true</span></code>
+ if the transaction should abort before committing. Otherwise, client
+ implementation should return <code class="computeroutput"><span class="keyword">false</span></code>.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__permission_to_abort_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__permission_to_abort_" title="Virtual function permission_to_abort">Virtual
+ function <code class="computeroutput"><span class="identifier">permission_to_abort</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">permission_to_abort</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">lhs</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ This method is invoked when a transaction is requesting permission to
+ abort another transaction due to a memory inconsistency. Client code
+ should return <code class="computeroutput"><span class="keyword">true</span></code> if the
+ transaction should abort before committing. Otherwise, client implementation
+ should return <code class="computeroutput"><span class="keyword">false</span></code>. The
+ <code class="computeroutput"><span class="identifier">lhs</span></code> input parameter is
+ the transaction requesting to abort <code class="computeroutput"><span class="identifier">rhs</span></code>,
+ the <code class="computeroutput"><span class="identifier">rhs</span></code> input parameter
+ is the transaction which will be aborted if return <code class="computeroutput"><span class="keyword">true</span></code>.
+ Otherwise, if the method returns <code class="computeroutput"><span class="keyword">false</span></code>,
+ <code class="computeroutput"><span class="identifier">lhs</span></code> will be aborted.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__allow_lock_to_abort_tx_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__allow_lock_to_abort_tx_" title="Virtual function allow_lock_to_abort_tx">Virtual
+ function <code class="computeroutput"><span class="identifier">allow_lock_to_abort_tx</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">allow_lock_to_abort_tx</span><span class="special">(</span>
+ <span class="keyword">int</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">lockWaitTime</span><span class="special">,</span>
+ <span class="keyword">int</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">lockAborted</span><span class="special">,</span>
+ <span class="keyword">bool</span> <span class="identifier">txIsIrrevocable</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__lock_sleep_time_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__lock_sleep_time_" title="Virtual function lock_sleep_time">Virtual
+ function <code class="computeroutput"><span class="identifier">lock_sleep_time</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">int</span> <span class="identifier">lock_sleep_time</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__perform_isolated_tx_wait_priority_promotion_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__perform_isolated_tx_wait_priority_promotion_" title="Virtual function perform_isolated_tx_wait_priority_promotion">Virtual
+ function <code class="computeroutput"><span class="identifier">perform_isolated_tx_wait_priority_promotion</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">perform_isolated_tx_wait_priority_promotion</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="special">&amp;)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ virtual void perform_isolated_tx_wait_priority_promotion( boost::stm::transaction
+ &amp;) = 0;
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__perform_irrevocable_tx_wait_priority_promotion_"></a><a class="link" href="base_contention_manager_hpp.html#toward_boost_stm.reference.base_contention_manager_hpp.abstract_class__base_contention_manager_.virtual_function__perform_irrevocable_tx_wait_priority_promotion_" title="Virtual function perform_irrevocable_tx_wait_priority_promotion">Virtual
+ function <code class="computeroutput"><span class="identifier">perform_irrevocable_tx_wait_priority_promotion</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">perform_irrevocable_tx_wait_priority_promotion</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="special">&amp;)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tx_ptr_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="language_like_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/data_types_hpp.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/data_types_hpp.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,87 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header &lt;boost/stm/data_types.hpp&gt;</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="../reference.html" title="Reference">
+<link rel="next" href="exceptions_hpp.html" title="Header &lt;boost/stm/exceptions.hpp&gt;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exceptions_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.reference.data_types_hpp"></a><a class="link" href="data_types_hpp.html" title="Header &lt;boost/stm/data_types.hpp&gt;"> Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">data_types</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="data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__transaction_type_">Enum
+ <code class="computeroutput"><span class="identifier">transaction_type</span></code></a></span></dt>
+<dt><span class="section"><a href="data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__latm_type_">Enum
+ <code class="computeroutput"><span class="identifier">latm_type</span></code></a></span></dt>
+<dt><span class="section"><a href="data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__transaction_state_">Enum
+ <code class="computeroutput"><span class="identifier">transaction_state</span></code></a></span></dt>
+<dt><span class="section"><a href="data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.typedef__thread_id_t_">Typedef
+ <code class="computeroutput"><span class="identifier">thread_id_t</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">stm</span> <span class="special">{</span>
+ <span class="keyword">enum</span> <span class="identifier">transaction_type</span><span class="special">;</span>
+ <span class="keyword">enum</span> <span class="identifier">latm_type</span><span class="special">;</span>
+ <span class="keyword">enum</span> <span class="identifier">transaction_state</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">thread_id_t</span><span class="special">;</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.data_types_hpp.enum__transaction_type_"></a><a class="link" href="data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__transaction_type_" title="Enum transaction_type">Enum
+ <code class="computeroutput"><span class="identifier">transaction_type</span></code></a>
+</h4></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.data_types_hpp.enum__latm_type_"></a><a class="link" href="data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__latm_type_" title="Enum latm_type">Enum
+ <code class="computeroutput"><span class="identifier">latm_type</span></code></a>
+</h4></div></div></div></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.data_types_hpp.enum__transaction_state_"></a><a class="link" href="data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.enum__transaction_state_" title="Enum transaction_state">Enum
+ <code class="computeroutput"><span class="identifier">transaction_state</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">enum</span> <span class="identifier">transaction_state</span>
+<span class="special">{</span>
+ <span class="identifier">e_no_state</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">,</span> <span class="comment">// no state is -1
+</span> <span class="identifier">e_aborted</span><span class="special">,</span> <span class="comment">// ensure aborted = 0
+</span> <span class="identifier">e_committed</span><span class="special">,</span> <span class="comment">// committed is positive
+</span> <span class="identifier">e_hand_off</span><span class="special">,</span> <span class="comment">// so is handoff in case bool conversion
+</span> <span class="identifier">e_in_flight</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.data_types_hpp.typedef__thread_id_t_"></a><a class="link" href="data_types_hpp.html#toward_boost_stm.reference.data_types_hpp.typedef__thread_id_t_" title="Typedef thread_id_t">Typedef
+ <code class="computeroutput"><span class="identifier">thread_id_t</span></code></a>
+</h4></div></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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exceptions_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/exceptions_hpp.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/exceptions_hpp.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,53 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header &lt;boost/stm/exceptions.hpp&gt;</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="data_types_hpp.html" title="Header &lt;boost/stm/data_types.hpp&gt;">
+<link rel="next" href="transaction_hpp.html" title="Header &lt;boost/stm/transaction.hpp&gt;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="data_types_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="transaction_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.reference.exceptions_hpp"></a><a class="link" href="exceptions_hpp.html" title="Header &lt;boost/stm/exceptions.hpp&gt;"> Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">exceptions</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="exceptions_hpp.html#toward_boost_stm.reference.exceptions_hpp.class__aborted_transaction_exception_">Class
+ <code class="computeroutput"><span class="identifier">aborted_transaction_exception</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">stm</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">aborted_transaction_exception</span><span class="special">;</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.exceptions_hpp.class__aborted_transaction_exception_"></a><a class="link" href="exceptions_hpp.html#toward_boost_stm.reference.exceptions_hpp.class__aborted_transaction_exception_" title="Class aborted_transaction_exception">Class
+ <code class="computeroutput"><span class="identifier">aborted_transaction_exception</span></code></a>
+</h4></div></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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="data_types_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="transaction_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/language_like_hpp.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/language_like_hpp.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,210 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header &lt;boost/stm/language_like.hpp&gt;</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="base_contention_manager_hpp.html" title="Header &lt;boost/stm/base_contention_manager.hpp&gt;">
+<link rel="next" href="transaction_bookkeeping_hpp.html" title="Header &lt;boost/stm/transaction_bookkeeping.hpp&gt;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="base_contention_manager_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="transaction_bookkeeping_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.reference.language_like_hpp"></a><a class="link" href="language_like_hpp.html" title="Header &lt;boost/stm/language_like.hpp&gt;"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">language_like</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="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__atomic_">Macro
+ <code class="computeroutput"><span class="identifier">atomic</span></code></a></span></dt>
+<dt><span class="section"><a href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__try_atomic_">Macro
+ <code class="computeroutput"><span class="identifier">try_atomic</span></code></a></span></dt>
+<dt><span class="section"><a href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__use_atomic_">Macro
+ <code class="computeroutput"><span class="identifier">use_atomic</span></code></a></span></dt>
+<dt><span class="section"><a href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__catch_before_retry_">Macro
+ <code class="computeroutput"><span class="identifier">catch_before_retry</span></code></a></span></dt>
+<dt><span class="section"><a href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__before_retry_">Macro
+ <code class="computeroutput"><span class="identifier">before_retry</span></code></a></span></dt>
+<dt><span class="section"><a href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__end_atom_">Macro
+ <code class="computeroutput"><span class="identifier">end_atom</span></code></a></span></dt>
+</dl></div>
+<p>
+ The complexity behind the <code class="computeroutput"><span class="identifier">atomic</span></code>
+ macro is needed to guarantee two fundamental goals.
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ First, transactions must start and end correctly. Second, transactions
+ must change their retry behavior based on whether they are a child or parent
+ transaction to ensure proper closed nesting, flattened transaction behavior
+ is performed.
+ </li></ul></div>
+<p>
+ The <code class="computeroutput"><span class="identifier">atomic</span></code> preprocessor behaves
+ as follows. When the transactional for loop is entered, a transaction automatic
+ object is constructed which initializes the transaction and puts it in-flight.
+ The for loop conditional ensures the following conditions:
+ </p>
+<div class="orderedlist"><ol type="1">
+<li>
+ the transaction is uncommitted,
+ </li>
+<li>
+ the transaction has the opportunity to throw an exception if necessary,
+ and
+ </li>
+<li>
+ the transaction is in-flight.
+ </li>
+</ol></div>
+<p>
+ Once a transaction commits, the check on (1) <code class="computeroutput"><span class="special">!</span><span class="identifier">T</span><span class="special">.</span><span class="identifier">committed</span><span class="special">()</span></code> ensures the transaction is not executed
+ again. If the transaction has been aborted but is a child transaction, the
+ transaction must be restarted at the parent level. The call to (2) <code class="computeroutput"><span class="identifier">T</span><span class="special">.</span><span class="identifier">check_throw_before_restart</span><span class="special">()</span></code> allows an aborted child transaction to
+ throw an exception upward (before it is restarted) so the entire transaction
+ can be restarted from the parent. The <code class="computeroutput"><span class="identifier">check_throw_before_restart</span><span class="special">()</span></code> API checks the current run-time state of
+ the thread to determine if another transaction is active above it. This behavior
+ allows transactions to be used at any nesting level while dynamically ensuring
+ the correct retry behavior. Finally, the call to <code class="computeroutput"><span class="identifier">restart_if_not_inflight</span><span class="special">()</span></code> ensures the transaction is correctly restarted
+ after each subsequent abort.
+ </p>
+<p>
+ Once all of the transactional operations within the for loop are executed,
+ a call to no_throw_end() is made which ends the transaction. The <code class="computeroutput"><span class="identifier">no_throw_end</span><span class="special">()</span></code>
+ terminates the transaction by either committing or aborting it. Note, however,
+ that <code class="computeroutput"><span class="identifier">no_throw_end</span><span class="special">()</span></code>
+ does not throw an exception if the transaction is aborted, whereas the prior
+ TBoost.STM's API end() does. This non-throwing behavior deviates from the
+ prior TBoost.STM implementation of automatic objects when end() was invoked
+ within the try / catch body. Furthermore, due to <code class="computeroutput"><span class="identifier">no_throw_end</span><span class="special">()</span></code> not throwing an exception if the transaction
+ is aborted, some cases may arise where <code class="computeroutput"><span class="identifier">catch_before_retry</span></code>
+ or <code class="computeroutput"><span class="identifier">before_retry</span></code> operations
+ are not invoked when a transaction is aborted. This is a current limitation
+ of the system and is overcome by inserting a manual end() operation as the
+ last operation in the atomic block. The explicit end() ensures any operations
+ within the before_retry block are executed if the transaction is aborted.
+ </p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">atomic</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span>
+<span class="preprocessor">#define</span> <span class="identifier">try_atomic</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span>
+<span class="preprocessor">#define</span> <span class="identifier">use_atomic</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span>
+<span class="preprocessor">#define</span> <span class="identifier">catch_before_retry</span><span class="special">(</span><span class="identifier">E</span><span class="special">)</span>
+<span class="preprocessor">#define</span> <span class="identifier">before_retry</span>
+<span class="preprocessor">#define</span> <span class="identifier">end_atom</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.language_like_hpp.macro__atomic_"></a><a class="link" href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__atomic_" title="Macro atomic">Macro
+ <code class="computeroutput"><span class="identifier">atomic</span></code></a>
+</h4></div></div></div>
+<p>
+ Use atomic transaction T for optimistic critical section. Supports single-depth
+ and multiple-depth (nested) transactions. Performs automatic retry when
+ T is a parent transaction, throws exception when T is a child transaction.
+ This automatic switch enables correctly behaved nested and non-nested transactions
+ </p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">atomic</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span> <span class="special">\</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">transaction</span> <span class="identifier">T</span><span class="special">;</span> <span class="special">\</span>
+ <span class="special">!</span><span class="identifier">T</span><span class="special">.</span><span class="identifier">committed</span><span class="special">()</span> <span class="special">&amp;&amp;</span> <span class="identifier">T</span><span class="special">.</span><span class="identifier">check_throw_before_restart</span><span class="special">()</span> <span class="special">&amp;&amp;</span> <span class="identifier">T</span><span class="special">.</span><span class="identifier">restart_if_not_inflight</span><span class="special">();</span> <span class="special">\</span>
+ <span class="identifier">T</span><span class="special">.</span><span class="identifier">no_throw_end</span><span class="special">())</span>
+ <span class="keyword">try</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.language_like_hpp.macro__try_atomic_"></a><a class="link" href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__try_atomic_" title="Macro try_atomic">Macro
+ <code class="computeroutput"><span class="identifier">try_atomic</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">try_atomic</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span> <span class="special">\</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">transaction</span> <span class="identifier">T</span><span class="special">;</span> <span class="special">\</span>
+ <span class="special">!</span><span class="identifier">T</span><span class="special">.</span><span class="identifier">committed</span><span class="special">()</span> <span class="special">&amp;&amp;</span> <span class="identifier">T</span><span class="special">.</span><span class="identifier">restart</span><span class="special">();</span> <span class="special">\</span>
+ <span class="identifier">T</span><span class="special">.</span><span class="identifier">no_throw_end</span><span class="special">())</span>
+ <span class="keyword">try</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.language_like_hpp.macro__use_atomic_"></a><a class="link" href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__use_atomic_" title="Macro use_atomic">Macro
+ <code class="computeroutput"><span class="identifier">use_atomic</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">use_atomic</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span> <span class="special">\</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">transaction</span> <span class="identifier">T</span><span class="special">;</span> <span class="special">\</span>
+ <span class="special">!</span><span class="identifier">T</span><span class="special">.</span><span class="identifier">committed</span><span class="special">()</span> <span class="special">&amp;&amp;</span> <span class="identifier">T</span><span class="special">.</span><span class="identifier">restart</span><span class="special">();</span> <span class="special">\</span>
+ <span class="identifier">T</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.language_like_hpp.macro__catch_before_retry_"></a><a class="link" href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__catch_before_retry_" title="Macro catch_before_retry">Macro
+ <code class="computeroutput"><span class="identifier">catch_before_retry</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">catch_before_retry</span><span class="special">(</span><span class="identifier">E</span><span class="special">)</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">aborted_tx</span> <span class="special">&amp;</span><span class="identifier">E</span><span class="special">)</span>
+</pre>
+<p>
+ Catches exception when transaction is aborted. This, before_retry, or end_atom
+ must follow an atomic block. Once all operations within the catch_before_retry
+ block are executed, control is returned to the local atomic where the transaction
+ is retried (if it is the parent) or the atomic block is exited by exception
+ (if it is a child).
+ </p>
+<p>
+ To be used pairwise with <code class="computeroutput"><span class="identifier">try_atomic</span></code>
+ or <code class="computeroutput"><span class="identifier">atomic</span></code>.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.language_like_hpp.macro__before_retry_"></a><a class="link" href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__before_retry_" title="Macro before_retry">Macro
+ <code class="computeroutput"><span class="identifier">before_retry</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">before_retry</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">aborted_tx</span> <span class="special">&amp;)</span>
+</pre>
+<p>
+ Same as catch_before_retry(E) except the exception is discarded.
+ </p>
+<p>
+ To be used pairwise with <code class="computeroutput"><span class="identifier">try_atomic</span></code>
+ or <code class="computeroutput"><span class="identifier">atomic</span></code>.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.language_like_hpp.macro__end_atom_"></a><a class="link" href="language_like_hpp.html#toward_boost_stm.reference.language_like_hpp.macro__end_atom_" title="Macro end_atom">Macro
+ <code class="computeroutput"><span class="identifier">end_atom</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">end_atom</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">aborted_tx</span> <span class="special">&amp;)</span> <span class="special">{}</span>
+</pre>
+<p>
+ Same as before_retry except the exception is discarded and {} are automated.
+ </p>
+<p>
+ To be used pairwise with <code class="computeroutput"><span class="identifier">try_atomic</span></code>
+ or <code class="computeroutput"><span class="identifier">atomic</span></code>.
+ </p>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="base_contention_manager_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="transaction_bookkeeping_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_bookkeeping_hpp.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_bookkeeping_hpp.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,120 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header &lt;boost/stm/transaction_bookkeeping.hpp&gt;</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="language_like_hpp.html" title="Header &lt;boost/stm/language_like.hpp&gt;">
+<link rel="next" href="../examples.html" title="Examples">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="language_like_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../examples.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.reference.transaction_bookkeeping_hpp"></a><a class="link" href="transaction_bookkeeping_hpp.html" title="Header &lt;boost/stm/transaction_bookkeeping.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction_bookkeeping</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="transaction_bookkeeping_hpp.html#toward_boost_stm.reference.transaction_bookkeeping_hpp.class__transaction_bookkeeping_">Class
+ <code class="computeroutput"><span class="identifier">transaction_bookkeeping</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">stm</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">transaction_bookkeeping</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.transaction_bookkeeping_hpp.class__transaction_bookkeeping_"></a><a class="link" href="transaction_bookkeeping_hpp.html#toward_boost_stm.reference.transaction_bookkeeping_hpp.class__transaction_bookkeeping_" title="Class transaction_bookkeeping">Class
+ <code class="computeroutput"><span class="identifier">transaction_bookkeeping</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">transaction_bookkeeping</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special">&lt;</span><span class="identifier">uint32</span><span class="special">,</span> <span class="identifier">uint32</span><span class="special">&gt;</span> <span class="identifier">thread_commit_map</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special">&lt;</span><span class="identifier">ThreadIdAndCommitId</span><span class="special">,</span> <span class="identifier">uint32</span><span class="special">&gt;</span> <span class="identifier">CommitHistory</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special">&lt;</span><span class="identifier">ThreadIdAndCommitId</span><span class="special">,</span> <span class="identifier">uint32</span><span class="special">&gt;</span> <span class="identifier">AbortHistory</span><span class="special">;</span>
+
+ <span class="identifier">transaction_bookkeeping</span><span class="special">();</span>
+
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">lockConvoyMs</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">commitTimeMs</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">readAborts</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">writeAborts</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">abortPermDenied</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="identifier">totalAborts</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">commits</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">handOffs</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">newMemoryAborts</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">newMemoryCommits</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">deletedMemoryAborts</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">deletedMemoryCommits</span><span class="special">();</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">readChangedToWrite</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">readStayedAsRead</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">inc_read_aborts</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">inc_write_aborts</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">inc_thread_commits</span><span class="special">(</span><span class="identifier">uint32</span> <span class="identifier">threadId</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">inc_thread_aborts</span><span class="special">(</span><span class="identifier">uint32</span> <span class="identifier">threadId</span><span class="special">);</span>
+
+ <span class="identifier">thread_commit_map</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">threadedCommits</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">thread_commit_map</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">threadedAborts</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">inc_lock_convoy_ms</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">inc_commit_time_ms</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">inc_commits</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">inc_abort_perm_denied</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">threadId</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">inc_handoffs</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">inc_new_mem_aborts_by</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">inc_new_mem_commits_by</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">inc_del_mem_aborts_by</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">inc_del_mem_commits_by</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">incrementReadChangedToWrite</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">incrementReadStayedAsRead</span><span class="special">();</span>
+
+ <span class="identifier">CommitHistory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">getCommitReadSetList</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">CommitHistory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">getCommitWriteSetList</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">AbortHistory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">getAbortReadSetList</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">AbortHistory</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">getAbortWriteSetList</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">pushBackSizeOfReadSetWhenAborting</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">size</span><span class="special">);</span>
+
+ <span class="keyword">void</span> <span class="identifier">pushBackSizeOfWriteSetWhenAborting</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">size</span><span class="special">);</span>
+
+ <span class="keyword">void</span> <span class="identifier">pushBackSizeOfReadSetWhenCommitting</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">size</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">pushBackSizeOfWriteSetWhenCommitting</span><span class="special">(</span><span class="identifier">uint32</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">size</span><span class="special">);</span>
+
+ <span class="keyword">bool</span> <span class="identifier">isLoggingAbortAndCommitSize</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">setIsLoggingAbortAndCommitSize</span><span class="special">(</span><span class="keyword">bool</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">in</span><span class="special">);</span>
+
+ <span class="keyword">friend</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">transaction_bookkeeping</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">that</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="language_like_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../examples.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_hpp.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_hpp.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,1065 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header &lt;boost/stm/transaction.hpp&gt;</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="exceptions_hpp.html" title="Header &lt;boost/stm/exceptions.hpp&gt;">
+<link rel="next" href="transaction_object_hpp.html" title="Header &lt;boost/stm/transaction_object.hpp&gt;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exceptions_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="transaction_object_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp"></a><a class="link" href="transaction_hpp.html" title="Header &lt;boost/stm/transaction.hpp&gt;"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction</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="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_">Class
+ <code class="computeroutput"><span class="identifier">transaction</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__initialize___">Static
+ Function <code class="computeroutput"><span class="identifier">initialize</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__initialize_thread___">Static
+ Function <code class="computeroutput"><span class="identifier">initialize_thread</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__terminate_thread___">Static
+ Function <code class="computeroutput"><span class="identifier">terminate_thread</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__contention_manager_">Static
+ Function <code class="computeroutput"><span class="identifier">contention_manager</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__get_contention_manager_">Static
+ Function <code class="computeroutput"><span class="identifier">get_contention_manager</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__enable_dynamic_priority_assignment_">Static
+ Function <code class="computeroutput"><span class="identifier">enable_dynamic_priority_assignment</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__disable_dynamic_priority_assignment_">Static
+ Function <code class="computeroutput"><span class="identifier">disable_dynamic_priority_assignment</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_dynamic_priority_assignment_">Static
+ Function <code class="computeroutput"><span class="identifier">doing_dynamic_priority_assignment</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__enableloggingofabortandcommitsetsize_">Static
+ Function <code class="computeroutput"><span class="identifier">enableLoggingOfAbortAndCommitSetSize</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__disableloggingofabortandcommitsetsize_">Static
+ Function <code class="computeroutput"><span class="identifier">disableLoggingOfAbortAndCommitSetSize</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__transaction_bookkeeping_">Static
+ Function <code class="computeroutput"><span class="identifier">transaction_bookkeeping</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__early_conflict_detection_">Static
+ Function <code class="computeroutput"><span class="identifier">early_conflict_detection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__late_conflict_detection_">Static
+ Function <code class="computeroutput"><span class="identifier">late_conflict_detection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_early_conflict_detection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_early_conflict_detection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_late_conflict_detection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_late_conflict_detection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__consistency_checking_string_">Static
+ Function <code class="computeroutput"><span class="identifier">consistency_checking_string</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__validating_">Static
+ Function <code class="computeroutput"><span class="identifier">validating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__invalidating_">Static
+ Function <code class="computeroutput"><span class="identifier">invalidating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__direct_updating_">Static
+ Function <code class="computeroutput"><span class="identifier">direct_updating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__deferred_updating_">Static
+ Function <code class="computeroutput"><span class="identifier">deferred_updating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_direct_updating_">Static
+ Function <code class="computeroutput"><span class="identifier">do_direct_updating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_deferred_updating_">Static
+ Function <code class="computeroutput"><span class="identifier">do_deferred_updating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__update_policy_string_">Static
+ Function <code class="computeroutput"><span class="identifier">update_policy_string</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__latm_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">latm_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__latm_protection_str_">Static
+ Function <code class="computeroutput"><span class="identifier">latm_protection_str</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_full_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_full_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_tm_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_tm_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_tx_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_tx_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_tx_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">doing_tx_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_full_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">doing_full_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_tm_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">doing_tm_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__in_flight_transactions_">Static
+ Function <code class="computeroutput"><span class="identifier">in_flight_transactions</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.constructor__transaction___">Constructor
+ <code class="computeroutput"><span class="identifier">transaction</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.destructor___transaction___">Destructor
+ <code class="computeroutput"><span class="special">~</span><span class="identifier">transaction</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__committed_">Member
+ Function <code class="computeroutput"><span class="identifier">committed</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__aborted_">Member
+ Function <code class="computeroutput"><span class="identifier">aborted</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__in_flight_">Member
+ Function <code class="computeroutput"><span class="identifier">in_flight</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__begin_">Member
+ Function <code class="computeroutput"><span class="identifier">begin</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__restart_">Member
+ Function <code class="computeroutput"><span class="identifier">restart</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__restart_if_not_inflight_">Member
+ Function <code class="computeroutput"><span class="identifier">restart_if_not_inflight</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__end_">Member
+ Function <code class="computeroutput"><span class="identifier">end</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__no_throw_end_">Member
+ Function <code class="computeroutput"><span class="identifier">no_throw_end</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__force_to_abort_">Member
+ Function <code class="computeroutput"><span class="identifier">force_to_abort</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__unforce_to_abort_">Member
+ Function <code class="computeroutput"><span class="identifier">unforce_to_abort</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__priority_">Member
+ Function <code class="computeroutput"><span class="identifier">priority</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__set_priority_">Member
+ Function <code class="computeroutput"><span class="identifier">set_priority</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__raise_priority_">Member
+ Function <code class="computeroutput"><span class="identifier">raise_priority</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__make_irrevocable_">Member
+ Function <code class="computeroutput"><span class="identifier">make_irrevocable</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__make_isolated_">Member
+ Function <code class="computeroutput"><span class="identifier">make_isolated</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__irrevocable_">Member
+ Function <code class="computeroutput"><span class="identifier">irrevocable</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__isolated_">Member
+ Function <code class="computeroutput"><span class="identifier">isolated</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__thread_id_">Member
+ Function <code class="computeroutput"><span class="identifier">thread_id</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template_member_function__find_original___">Template
+ Member Function <code class="computeroutput"><span class="identifier">find_original</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__read___">Template
+ Function <code class="computeroutput"><span class="identifier">read</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__read_ptr___">Template
+ Function <code class="computeroutput"><span class="identifier">read_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__write___">Template
+ Function <code class="computeroutput"><span class="identifier">write</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__write_ptr___">Template
+ Function <code class="computeroutput"><span class="identifier">write_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__get_written___">Template
+ Function <code class="computeroutput"><span class="identifier">get_written</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__delete_memory___">Template
+ Function <code class="computeroutput"><span class="identifier">delete_memory</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__new_memory___">Template
+ Function <code class="computeroutput"><span class="identifier">new_memory</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__new_memory_copy___">Template
+ Function <code class="computeroutput"><span class="identifier">new_memory_copy</span><span class="special">&lt;&gt;</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">stm</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">transaction</span><span class="special">;</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_" title="Class transaction">Class
+ <code class="computeroutput"><span class="identifier">transaction</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__initialize___">Static
+ Function <code class="computeroutput"><span class="identifier">initialize</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__initialize_thread___">Static
+ Function <code class="computeroutput"><span class="identifier">initialize_thread</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__terminate_thread___">Static
+ Function <code class="computeroutput"><span class="identifier">terminate_thread</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__contention_manager_">Static
+ Function <code class="computeroutput"><span class="identifier">contention_manager</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__get_contention_manager_">Static
+ Function <code class="computeroutput"><span class="identifier">get_contention_manager</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__enable_dynamic_priority_assignment_">Static
+ Function <code class="computeroutput"><span class="identifier">enable_dynamic_priority_assignment</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__disable_dynamic_priority_assignment_">Static
+ Function <code class="computeroutput"><span class="identifier">disable_dynamic_priority_assignment</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_dynamic_priority_assignment_">Static
+ Function <code class="computeroutput"><span class="identifier">doing_dynamic_priority_assignment</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__enableloggingofabortandcommitsetsize_">Static
+ Function <code class="computeroutput"><span class="identifier">enableLoggingOfAbortAndCommitSetSize</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__disableloggingofabortandcommitsetsize_">Static
+ Function <code class="computeroutput"><span class="identifier">disableLoggingOfAbortAndCommitSetSize</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__transaction_bookkeeping_">Static
+ Function <code class="computeroutput"><span class="identifier">transaction_bookkeeping</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__early_conflict_detection_">Static
+ Function <code class="computeroutput"><span class="identifier">early_conflict_detection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__late_conflict_detection_">Static
+ Function <code class="computeroutput"><span class="identifier">late_conflict_detection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_early_conflict_detection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_early_conflict_detection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_late_conflict_detection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_late_conflict_detection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__consistency_checking_string_">Static
+ Function <code class="computeroutput"><span class="identifier">consistency_checking_string</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__validating_">Static
+ Function <code class="computeroutput"><span class="identifier">validating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__invalidating_">Static
+ Function <code class="computeroutput"><span class="identifier">invalidating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__direct_updating_">Static
+ Function <code class="computeroutput"><span class="identifier">direct_updating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__deferred_updating_">Static
+ Function <code class="computeroutput"><span class="identifier">deferred_updating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_direct_updating_">Static
+ Function <code class="computeroutput"><span class="identifier">do_direct_updating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_deferred_updating_">Static
+ Function <code class="computeroutput"><span class="identifier">do_deferred_updating</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__update_policy_string_">Static
+ Function <code class="computeroutput"><span class="identifier">update_policy_string</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__latm_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">latm_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__latm_protection_str_">Static
+ Function <code class="computeroutput"><span class="identifier">latm_protection_str</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_full_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_full_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_tm_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_tm_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_tx_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">do_tx_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_tx_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">doing_tx_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_full_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">doing_full_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_tm_lock_protection_">Static
+ Function <code class="computeroutput"><span class="identifier">doing_tm_lock_protection</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__in_flight_transactions_">Static
+ Function <code class="computeroutput"><span class="identifier">in_flight_transactions</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.constructor__transaction___">Constructor
+ <code class="computeroutput"><span class="identifier">transaction</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.destructor___transaction___">Destructor
+ <code class="computeroutput"><span class="special">~</span><span class="identifier">transaction</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__committed_">Member
+ Function <code class="computeroutput"><span class="identifier">committed</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__aborted_">Member
+ Function <code class="computeroutput"><span class="identifier">aborted</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__in_flight_">Member
+ Function <code class="computeroutput"><span class="identifier">in_flight</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__begin_">Member
+ Function <code class="computeroutput"><span class="identifier">begin</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__restart_">Member
+ Function <code class="computeroutput"><span class="identifier">restart</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__restart_if_not_inflight_">Member
+ Function <code class="computeroutput"><span class="identifier">restart_if_not_inflight</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__end_">Member
+ Function <code class="computeroutput"><span class="identifier">end</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__no_throw_end_">Member
+ Function <code class="computeroutput"><span class="identifier">no_throw_end</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__force_to_abort_">Member
+ Function <code class="computeroutput"><span class="identifier">force_to_abort</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__unforce_to_abort_">Member
+ Function <code class="computeroutput"><span class="identifier">unforce_to_abort</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__priority_">Member
+ Function <code class="computeroutput"><span class="identifier">priority</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__set_priority_">Member
+ Function <code class="computeroutput"><span class="identifier">set_priority</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__raise_priority_">Member
+ Function <code class="computeroutput"><span class="identifier">raise_priority</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__make_irrevocable_">Member
+ Function <code class="computeroutput"><span class="identifier">make_irrevocable</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__make_isolated_">Member
+ Function <code class="computeroutput"><span class="identifier">make_isolated</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__irrevocable_">Member
+ Function <code class="computeroutput"><span class="identifier">irrevocable</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__isolated_">Member
+ Function <code class="computeroutput"><span class="identifier">isolated</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__thread_id_">Member
+ Function <code class="computeroutput"><span class="identifier">thread_id</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template_member_function__find_original___">Template
+ Member Function <code class="computeroutput"><span class="identifier">find_original</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__read___">Template
+ Function <code class="computeroutput"><span class="identifier">read</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__read_ptr___">Template
+ Function <code class="computeroutput"><span class="identifier">read_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__write___">Template
+ Function <code class="computeroutput"><span class="identifier">write</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__write_ptr___">Template
+ Function <code class="computeroutput"><span class="identifier">write_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__get_written___">Template
+ Function <code class="computeroutput"><span class="identifier">get_written</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__delete_memory___">Template
+ Function <code class="computeroutput"><span class="identifier">delete_memory</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__new_memory___">Template
+ Function <code class="computeroutput"><span class="identifier">new_memory</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__new_memory_copy___">Template
+ Function <code class="computeroutput"><span class="identifier">new_memory_copy</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></div>
+<p>
+ TBoost.STM defines transactions as stackbased objects using RAII. In addition
+ to the static interfaces for direct and deferred updating described earlier
+ in this section, the following interfaces are necessary for performing
+ transactions.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">transaction</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="comment">// initialization
+</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">initialize</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">initialize_thread</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">terminate_thread</span><span class="special">();</span>
+
+ <span class="comment">// contention manager
+</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">contention_manager</span><span class="special">(</span><span class="identifier">base_contention_manager</span> <span class="special">*</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">static</span> <span class="identifier">base_contention_manager</span><span class="special">*</span> <span class="identifier">get_contention_manager</span><span class="special">();</span>
+
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">enable_dynamic_priority_assignment</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">disable_dynamic_priority_assignment</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">doing_dynamic_priority_assignment</span><span class="special">();</span>
+
+ <span class="comment">// bookeeping
+</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">enableLoggingOfAbortAndCommitSetSize</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">disableLoggingOfAbortAndCommitSetSize</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">transaction_bookkeeping</span> <span class="special">&amp;</span> <span class="identifier">bookkeeping</span><span class="special">();</span>
+
+ <span class="comment">// conflict detection
+</span> <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">early_conflict_detection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">late_conflict_detection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">do_early_conflict_detection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">do_late_conflict_detection</span><span class="special">();</span>
+
+ <span class="comment">// consistency checking
+</span> <span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">consistency_checking_string</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">validating</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">invalidating</span><span class="special">();</span>
+
+ <span class="comment">// updating
+</span> <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">direct_updating</span><span class="special">()</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">deferred_updating</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">do_direct_updating</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">do_deferred_updating</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">update_policy_string</span><span class="special">();</span>
+
+ <span class="comment">// Lock Aware Transactional Memory support methods
+</span> <span class="keyword">static</span> <span class="identifier">latm_type</span> <span class="keyword">const</span> <span class="identifier">latm_protection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span> <span class="identifier">latm_protection_str</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">do_full_lock_protection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">do_tm_lock_protection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">do_tx_lock_protection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">doing_full_lock_protection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">doing_tm_lock_protection</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">doing_tx_lock_protection</span><span class="special">();</span>
+
+ <span class="comment">//in flight transactions
+</span> <span class="keyword">static</span> <span class="identifier">InflightTxes</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">in_flight_transactions</span><span class="special">();</span>
+
+ <span class="comment">// transaction
+</span> <span class="identifier">transaction</span><span class="special">();</span>
+ <span class="special">~</span><span class="identifier">transaction</span><span class="special">();</span>
+
+ <span class="keyword">bool</span> <span class="identifier">committed</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="identifier">aborted</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="identifier">in_flight</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">begin</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">restart</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">restart_if_not_inflight</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">end</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">no_throw_end</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">force_to_abort</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">unforce_to_abort</span><span class="special">();</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">priority</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">set_priority</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">raise_priority</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">make_irrevocable</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">make_isolated</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">irrevocable</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="identifier">isolated</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="identifier">thread_id_t</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">thread_id</span><span class="special">()</span> <span class="keyword">const</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="identifier">T</span><span class="special">&amp;</span> <span class="identifier">find_original</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">in</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="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">read</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">in</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="identifier">T</span> <span class="keyword">const</span> <span class="special">*</span> <span class="identifier">read_ptr</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">*</span> <span class="identifier">in</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="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">in</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="identifier">T</span><span class="special">&amp;</span> <span class="identifier">write</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">in</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="identifier">T</span><span class="special">*</span> <span class="identifier">write_ptr</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">in</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="identifier">T</span><span class="special">&amp;</span> <span class="identifier">w</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">in</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="identifier">T</span><span class="special">*</span> <span class="identifier">get_written</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">in</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">void</span> <span class="identifier">delete_memory</span><span class="special">(</span><span class="identifier">T</span> <span class="special">&amp;</span><span class="identifier">in</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="identifier">T</span><span class="special">*</span> <span class="identifier">new_memory</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="identifier">T</span><span class="special">*</span> <span class="identifier">new_memory_copy</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+
+<span class="special">};</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__initialize___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__initialize___" title="Static Function initialize()">Static
+ Function <code class="computeroutput"><span class="identifier">initialize</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">initialize</span><span class="special">();</span>
+</pre>
+<p>
+ This method must called before any transaction objects are constructed.
+ The initialize method initializes the overall transaction locking framework.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__initialize_thread___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__initialize_thread___" title="Static Function initialize_thread()">Static
+ Function <code class="computeroutput"><span class="identifier">initialize_thread</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">initialize_thread</span><span class="special">();</span>
+</pre>
+<p>
+ This method must be called for each thread before any transactions are
+ constructed. This method initializes the thread's read and write sets,
+ new and deleted memory sets, mutex locks and thread-based flags.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__terminate_thread___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__terminate_thread___" title="Static Function terminate_thread()">Static
+ Function <code class="computeroutput"><span class="identifier">terminate_thread</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">terminate_thread</span><span class="special">();</span>
+</pre>
+<p>
+ This method should be called before destroying a thread. While it is
+ not needed, it will keep transaction operations functioning optimally
+ by reducing static overhead within the transaction class that is no longer
+ needed once a thread's lifetime has ended.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__contention_manager_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__contention_manager_" title="Static Function contention_manager">Static
+ Function <code class="computeroutput"><span class="identifier">contention_manager</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">contention_manager</span><span class="special">(</span><span class="identifier">base_contention_manager</span> <span class="special">*</span><span class="identifier">rhs</span><span class="special">);</span>
+</pre>
+<p>
+ Sets TBoost.STM's contention manager to point to the passed in contention
+ manager. When a new CM is passed in to TBoost.STM, it deletes the previously
+ pointed to CM and points to the new one. Client code is responsible for
+ constructing new CMs that are passed to this method, but TBoost.STM then
+ takes ownership of these CMs.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__get_contention_manager_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__get_contention_manager_" title="Static Function get_contention_manager">Static
+ Function <code class="computeroutput"><span class="identifier">get_contention_manager</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">base_contention_manager</span><span class="special">*</span> <span class="identifier">get_contention_manager</span><span class="special">();</span>
+</pre>
+<p>
+ Returns a pointer to the current CM used by TBoost.STM. This method is
+ mostly used for validation purposes after setting a CM to a user-specified
+ implementation.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__enable_dynamic_priority_assignment_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__enable_dynamic_priority_assignment_" title="Static Function enable_dynamic_priority_assignment">Static
+ Function <code class="computeroutput"><span class="identifier">enable_dynamic_priority_assignment</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">enable_dynamic_priority_assignment</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__disable_dynamic_priority_assignment_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__disable_dynamic_priority_assignment_" title="Static Function disable_dynamic_priority_assignment">Static
+ Function <code class="computeroutput"><span class="identifier">disable_dynamic_priority_assignment</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">disable_dynamic_priority_assignment</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_dynamic_priority_assignment_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_dynamic_priority_assignment_" title="Static Function doing_dynamic_priority_assignment">Static
+ Function <code class="computeroutput"><span class="identifier">doing_dynamic_priority_assignment</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">doing_dynamic_priority_assignment</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__enableloggingofabortandcommitsetsize_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__enableloggingofabortandcommitsetsize_" title="Static Function enableLoggingOfAbortAndCommitSetSize">Static
+ Function <code class="computeroutput"><span class="identifier">enableLoggingOfAbortAndCommitSetSize</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">enableLoggingOfAbortAndCommitSetSize</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__disableloggingofabortandcommitsetsize_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__disableloggingofabortandcommitsetsize_" title="Static Function disableLoggingOfAbortAndCommitSetSize">Static
+ Function <code class="computeroutput"><span class="identifier">disableLoggingOfAbortAndCommitSetSize</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">disableLoggingOfAbortAndCommitSetSize</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__transaction_bookkeeping_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__transaction_bookkeeping_" title="Static Function transaction_bookkeeping">Static
+ Function <code class="computeroutput"><span class="identifier">transaction_bookkeeping</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">transaction_bookkeeping</span> <span class="special">&amp;</span> <span class="identifier">bookkeeping</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__early_conflict_detection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__early_conflict_detection_" title="Static Function early_conflict_detection">Static
+ Function <code class="computeroutput"><span class="identifier">early_conflict_detection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">early_conflict_detection</span><span class="special">();</span>
+</pre>
+<p>
+ Returns true if direct updating is active and early conflict detection,
+ otherwise returns false.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__late_conflict_detection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__late_conflict_detection_" title="Static Function late_conflict_detection">Static
+ Function <code class="computeroutput"><span class="identifier">late_conflict_detection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">late_conflict_detection</span><span class="special">();</span>
+</pre>
+<p>
+ Returns true if deferred updating is active or if direct updating and
+ late conflict detection are active, otherwise returns false.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_early_conflict_detection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_early_conflict_detection_" title="Static Function do_early_conflict_detection">Static
+ Function <code class="computeroutput"><span class="identifier">do_early_conflict_detection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">do_early_conflict_detection</span><span class="special">();</span>
+</pre>
+<p>
+ Attempts to switch to early conflict detection. Returns false if in-flight
+ transactions are found or if deferred updating is active. Otherwise returns
+ true and enables early conflict detection.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_late_conflict_detection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_late_conflict_detection_" title="Static Function do_late_conflict_detection">Static
+ Function <code class="computeroutput"><span class="identifier">do_late_conflict_detection</span></code></a>
+</h5></div></div></div>
+<p>
+ Attempts to switch to late conflict detection. Returns false if in-flight
+ transactions are found, otherwise returns true and enables late conflict
+ detection.
+ </p>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">do_late_conflict_detection</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__consistency_checking_string_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__consistency_checking_string_" title="Static Function consistency_checking_string">Static
+ Function <code class="computeroutput"><span class="identifier">consistency_checking_string</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">consistency_checking_string</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__validating_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__validating_" title="Static Function validating">Static
+ Function <code class="computeroutput"><span class="identifier">validating</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">validating</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__invalidating_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__invalidating_" title="Static Function invalidating">Static
+ Function <code class="computeroutput"><span class="identifier">invalidating</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">invalidating</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__direct_updating_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__direct_updating_" title="Static Function direct_updating">Static
+ Function <code class="computeroutput"><span class="identifier">direct_updating</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">direct_updating</span><span class="special">()</span>
+</pre>
+<p>
+ Returns true if direct updating is active, otherwise returns false.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__deferred_updating_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__deferred_updating_" title="Static Function deferred_updating">Static
+ Function <code class="computeroutput"><span class="identifier">deferred_updating</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">deferred_updating</span><span class="special">();</span>
+</pre>
+<p>
+ Returns true if deferred updating is active, otherwise returns false
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_direct_updating_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_direct_updating_" title="Static Function do_direct_updating">Static
+ Function <code class="computeroutput"><span class="identifier">do_direct_updating</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">do_direct_updating</span><span class="special">();</span>
+</pre>
+<p>
+ Attempts to switch to direct updating. Returns false if inflight transactions
+ are found and TBoost.STM is unable to switch updating models. Otherwise,
+ returns true and enables direct updating.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_deferred_updating_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_deferred_updating_" title="Static Function do_deferred_updating">Static
+ Function <code class="computeroutput"><span class="identifier">do_deferred_updating</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">do_deferred_updating</span><span class="special">();</span>
+</pre>
+<p>
+ Attempts to switch to deferred updating. Returns false if inflight transactions
+ are found and TBoost.STM is unable to switch updating models. Otherwise,
+ returns true and enables deferred updating.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__update_policy_string_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__update_policy_string_" title="Static Function update_policy_string">Static
+ Function <code class="computeroutput"><span class="identifier">update_policy_string</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">update_policy_string</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__latm_protection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__latm_protection_" title="Static Function latm_protection">Static
+ Function <code class="computeroutput"><span class="identifier">latm_protection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">latm_type</span> <span class="keyword">const</span> <span class="identifier">latm_protection</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__latm_protection_str_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__latm_protection_str_" title="Static Function latm_protection_str">Static
+ Function <code class="computeroutput"><span class="identifier">latm_protection_str</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span> <span class="identifier">latm_protection_str</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_full_lock_protection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_full_lock_protection_" title="Static Function do_full_lock_protection">Static
+ Function <code class="computeroutput"><span class="identifier">do_full_lock_protection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">do_full_lock_protection</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_tm_lock_protection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_tm_lock_protection_" title="Static Function do_tm_lock_protection">Static
+ Function <code class="computeroutput"><span class="identifier">do_tm_lock_protection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">do_tm_lock_protection</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_tx_lock_protection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__do_tx_lock_protection_" title="Static Function do_tx_lock_protection">Static
+ Function <code class="computeroutput"><span class="identifier">do_tx_lock_protection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">do_tx_lock_protection</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_tx_lock_protection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_tx_lock_protection_" title="Static Function doing_tx_lock_protection">Static
+ Function <code class="computeroutput"><span class="identifier">doing_tx_lock_protection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">doing_tx_lock_protection</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_full_lock_protection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_full_lock_protection_" title="Static Function doing_full_lock_protection">Static
+ Function <code class="computeroutput"><span class="identifier">doing_full_lock_protection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">doing_full_lock_protection</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_tm_lock_protection_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__doing_tm_lock_protection_" title="Static Function doing_tm_lock_protection">Static
+ Function <code class="computeroutput"><span class="identifier">doing_tm_lock_protection</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">doing_tm_lock_protection</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__in_flight_transactions_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.static_function__in_flight_transactions_" title="Static Function in_flight_transactions">Static
+ Function <code class="computeroutput"><span class="identifier">in_flight_transactions</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">InflightTxes</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">in_flight_transactions</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.constructor__transaction___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.constructor__transaction___" title="Constructor transaction()">Constructor
+ <code class="computeroutput"><span class="identifier">transaction</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">transaction</span><span class="special">();</span>
+</pre>
+<p>
+ Default ctor for a transaction immediately puts the transaction in-flight.
+ In addition, the ctor points referenced members to a number of thread-specific
+ sets which it does by referencing the thread id.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.destructor___transaction___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.destructor___transaction___" title="Destructor ~transaction()">Destructor
+ <code class="computeroutput"><span class="special">~</span><span class="identifier">transaction</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="special">~</span><span class="identifier">transaction</span><span class="special">();</span>
+</pre>
+<p>
+ The transaction dtor releases the thread-specific transaction lock if
+ it is obtained. The dtor then immediately returns if the transaction
+ was not in-flight, or if the transaction was in-flight, it forces the
+ transaction to abort which performs a number of clean-up operations.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__committed_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__committed_" title="Member Function committed">Member
+ Function <code class="computeroutput"><span class="identifier">committed</span></code></a>
+</h5></div></div></div>
+<p>
+ States if the state of the transaction is e_committed or e_hand_off
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">committed</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__aborted_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__aborted_" title="Member Function aborted">Member
+ Function <code class="computeroutput"><span class="identifier">aborted</span></code></a>
+</h5></div></div></div>
+<p>
+ States if the state of the transaction is e_aborted
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">aborted</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__in_flight_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__in_flight_" title="Member Function in_flight">Member
+ Function <code class="computeroutput"><span class="identifier">in_flight</span></code></a>
+</h5></div></div></div>
+<p>
+ States if the state of the transaction is e_in_flight
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">in_flight</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__begin_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__begin_" title="Member Function begin">Member
+ Function <code class="computeroutput"><span class="identifier">begin</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">begin</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__restart_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__restart_" title="Member Function restart">Member
+ Function <code class="computeroutput"><span class="identifier">restart</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">restart</span><span class="special">();</span>
+</pre>
+<p>
+ This method is similar to the transaction ctor as it signals the start
+ of a transaction and attempts to put it in-flight. A fundamental difference
+ between restart_transaction() and the transaction ctor is that if the
+ transaction is already in-flight, begin_transaction() aborts the transaction
+ and restarts it. This behavior is important for composed transactions
+ where the outer transaction is never destructed, due to continually excepting
+ inner transactions which also prevent the outer transaction from reaching
+ its call to end_transaction(). This is shown concretely in the composable
+ transaction example
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__restart_if_not_inflight_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__restart_if_not_inflight_" title="Member Function restart_if_not_inflight">Member
+ Function <code class="computeroutput"><span class="identifier">restart_if_not_inflight</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">restart_if_not_inflight</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__end_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__end_" title="Member Function end">Member
+ Function <code class="computeroutput"><span class="identifier">end</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">end</span><span class="special">();</span>
+</pre>
+<p>
+ This method signals that the transaction should try to commit. The return
+ value stored in a transaction_state enumeration is either 1) e_hand_off,
+ meaning the transaction was nested and has handed off its state to the
+ parent transaction or 2) e_committed, meaning the transaction was committed
+ and global memory has been updated. If a transaction is aborted, an aborted_transaction_exception
+ is thrown. A call to end_transaction() will never return an enumerated
+ state which signals the transaction was aborted. Instead, if a transaction
+ is found to be aborted at a call to end_transaction(), an aborted transaction
+ exception is thrown. This behavior enables all aborted transactions to
+ be handled in a similar fashion, resulting in an aborted transaction
+ exception.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__no_throw_end_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__no_throw_end_" title="Member Function no_throw_end">Member
+ Function <code class="computeroutput"><span class="identifier">no_throw_end</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">no_throw_end</span><span class="special">();</span>
+</pre>
+<p>
+ Do the same as end() by caching every exception.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__force_to_abort_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__force_to_abort_" title="Member Function force_to_abort">Member
+ Function <code class="computeroutput"><span class="identifier">force_to_abort</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">force_to_abort</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__unforce_to_abort_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__unforce_to_abort_" title="Member Function unforce_to_abort">Member
+ Function <code class="computeroutput"><span class="identifier">unforce_to_abort</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">unforce_to_abort</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__priority_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__priority_" title="Member Function priority">Member
+ Function <code class="computeroutput"><span class="identifier">priority</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="keyword">const</span> <span class="special">&amp;</span><span class="identifier">priority</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__set_priority_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__set_priority_" title="Member Function set_priority">Member
+ Function <code class="computeroutput"><span class="identifier">set_priority</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">set_priority</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__raise_priority_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__raise_priority_" title="Member Function raise_priority">Member
+ Function <code class="computeroutput"><span class="identifier">raise_priority</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">raise_priority</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__make_irrevocable_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__make_irrevocable_" title="Member Function make_irrevocable">Member
+ Function <code class="computeroutput"><span class="identifier">make_irrevocable</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">make_irrevocable</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__make_isolated_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__make_isolated_" title="Member Function make_isolated">Member
+ Function <code class="computeroutput"><span class="identifier">make_isolated</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">make_isolated</span><span class="special">();</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__irrevocable_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__irrevocable_" title="Member Function irrevocable">Member
+ Function <code class="computeroutput"><span class="identifier">irrevocable</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">irrevocable</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__isolated_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__isolated_" title="Member Function isolated">Member
+ Function <code class="computeroutput"><span class="identifier">isolated</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">isolated</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__thread_id_"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.member_function__thread_id_" title="Member Function thread_id">Member
+ Function <code class="computeroutput"><span class="identifier">thread_id</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">thread_id_t</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">thread_id</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template_member_function__find_original___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template_member_function__find_original___" title="Template Member Function find_original&lt;&gt;">Template
+ Member Function <code class="computeroutput"><span class="identifier">find_original</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">find_original</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">in</span><span class="special">);</span>
+</pre>
+<p>
+ This method searches the transaction's write list for the original piece
+ of memory referred to by the transactional memory passed in. If the memory
+ passed in is the original global memory it is simply returned. Otherwise,
+ the copied memory passed in, is used to find the original global memory
+ stored in the transaction's write set and then the original memory is
+ returned. While new memory constructed within a transaction can be passed
+ into find_original(), it is not necessary as it always will return a
+ reference to itself. However, to reduce the complexity of client-side
+ code, it may be preferred to build a single method for both new and existing
+ memory address lookup.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__read___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__read___" title="Template Function read&lt;&gt;">Template
+ Function <code class="computeroutput"><span class="identifier">read</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">read</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">in</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="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">in</span><span class="special">);</span>
+</pre>
+<p>
+ The read method is used when a transaction is attempting to read a piece
+ of memory that is shared between threads (i.e. global heap space). The
+ input argument is a reference to a derived base_transaction_object instance,
+ the return value reference is the correct base_transaction_object to
+ read based on the current state of the transaction and the currently
+ employed updating policy.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__read_ptr___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__read_ptr___" title="Template Function read_ptr&lt;&gt;">Template
+ Function <code class="computeroutput"><span class="identifier">read_ptr</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">*</span> <span class="identifier">read_ptr</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">*</span> <span class="identifier">in</span><span class="special">);</span>
+</pre>
+<p>
+ Identical to the read() interface, except the input parameter is a base_transaction_object
+ pointer as is the return parameter
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__write___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__write___" title="Template Function write&lt;&gt;">Template
+ Function <code class="computeroutput"><span class="identifier">write</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">write</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">in</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="identifier">T</span><span class="special">&amp;</span> <span class="identifier">w</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">in</span><span class="special">);</span>
+</pre>
+<p>
+ The templatized write method is used when a transaction is attempting
+ to write to a piece of memory that is shared between threads (i.e. global
+ heap space). The input argument is a reference to a derived base_transaction_object
+ instance, the return value reference is the correct base_transaction_object
+ to write to based on the current state of the transaction and the currently
+ employed updating policy.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__write_ptr___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__write_ptr___" title="Template Function write_ptr&lt;&gt;">Template
+ Function <code class="computeroutput"><span class="identifier">write_ptr</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">write_ptr</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">in</span><span class="special">);</span>
+</pre>
+<p>
+ Identical to the write() interface, except the input is a base_transaction_object
+ pointer as is the return parameter.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__get_written___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__get_written___" title="Template Function get_written&lt;&gt;">Template
+ Function <code class="computeroutput"><span class="identifier">get_written</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_written</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">in</span><span class="special">);</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__delete_memory___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__delete_memory___" title="Template Function delete_memory&lt;&gt;">Template
+ Function <code class="computeroutput"><span class="identifier">delete_memory</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">delete_memory</span><span class="special">(</span><span class="identifier">T</span> <span class="special">&amp;</span><span class="identifier">in</span><span class="special">)</span>
+</pre>
+<p>
+ This method places the input parameter into a garbage set which is emptied
+ (deleted) once the transaction commits.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__new_memory___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__new_memory___" title="Template Function new_memory&lt;&gt;">Template
+ Function <code class="computeroutput"><span class="identifier">new_memory</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">new_memory</span><span class="special">();</span>
+</pre>
+<p>
+ This method constructs new memory of a derived base_transaction_object
+ type and returns a pointer to the newly allocated memory. While the input
+ template parameter is not used, C++ does not allow functions to differ
+ only by return type. Since different template function instantiations
+ would be constructed here, one per derived base_transaction_object type
+ used within the transaction, a compiler error would be generated for
+ differing return types if an input parameter was not supplied. To overcome
+ this, a void* could be used as the return value, but that would incur
+ client-side casting on the return value, a costly side-effect. To overcome
+ the limitations of C++, while still ensuring strong type-safety, an input
+ parameter which is never referenced is required.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__new_memory_copy___"></a><a class="link" href="transaction_hpp.html#toward_boost_stm.reference.transaction_hpp.class__transaction_.template__function__new_memory_copy___" title="Template Function new_memory_copy&lt;&gt;">Template
+ Function <code class="computeroutput"><span class="identifier">new_memory_copy</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">new_memory_copy</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+</pre>
+<p>
+ This method behaves similarly to the new_memory() interface except that
+ it makes an exact replica of the input parameter. The return value is
+ a pointer to the newly allocated, replicated object.
+ </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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exceptions_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="transaction_object_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_object_hpp.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/transaction_object_hpp.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,532 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header &lt;boost/stm/transaction_object.hpp&gt;</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="transaction_hpp.html" title="Header &lt;boost/stm/transaction.hpp&gt;">
+<link rel="next" href="tx_ptr_hpp.html" title="Header &lt;boost/stm/tx_ptr.hpp&gt;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="transaction_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tx_ptr_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp"></a><a class="link" href="transaction_object_hpp.html" title="Header &lt;boost/stm/transaction_object.hpp&gt;"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">transaction_object</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="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_">Abstract
+ Class <code class="computeroutput"><span class="identifier">base_transaction_object</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.constructor__base_transaction_object___">Constructor
+ <code class="computeroutput"><span class="identifier">base_transaction_object</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_destructor___base_transaction_object___">Virtual
+ Destructor <code class="computeroutput"><span class="special">~</span><span class="identifier">base_transaction_object</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__copy_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__move_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__retrieve_mem___">Static
+ function <code class="computeroutput"><span class="identifier">retrieve_mem</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__return_mem___">Static
+ function <code class="computeroutput"><span class="identifier">return_mem</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__alloc_size___">Static
+ function <code class="computeroutput"><span class="identifier">alloc_size</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__cache_deallocate___">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___">Template
+ Class <code class="computeroutput"><span class="identifier">transaction_object</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__copy_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__move_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__cache_deallocate___">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__native_trans___">Template
+ Class <code class="computeroutput"><span class="identifier">native_trans</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___">Template
+ Class <code class="computeroutput"><span class="identifier">transactional_object</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__copy_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__move_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__cache_deallocate___">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</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">stm</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">base_transaction_object</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Derived</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">transaction_object</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">native_trans</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">transactional_object</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">static</span> <span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">tx_up_cast</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">ptr</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">tx_static_cast</span><span class="special">(</span><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;*</span> <span class="identifier">ptr</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">tx_dynamic_cast</span><span class="special">(</span><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;*</span> <span class="identifier">ptr</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_" title="Abstract Class base_transaction_object">Abstract
+ Class <code class="computeroutput"><span class="identifier">base_transaction_object</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.constructor__base_transaction_object___">Constructor
+ <code class="computeroutput"><span class="identifier">base_transaction_object</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_destructor___base_transaction_object___">Virtual
+ Destructor <code class="computeroutput"><span class="special">~</span><span class="identifier">base_transaction_object</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__copy_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__move_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__retrieve_mem___">Static
+ function <code class="computeroutput"><span class="identifier">retrieve_mem</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__return_mem___">Static
+ function <code class="computeroutput"><span class="identifier">return_mem</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__alloc_size___">Static
+ function <code class="computeroutput"><span class="identifier">alloc_size</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__cache_deallocate___">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ This is the base class of all the transactional objects. It tracks:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">transactionThread_</span></code>: the
+ thread identifier holding the write acces to this transactional object
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">transaction_</span></code>: the pointer
+ to the transaction
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">version_</span></code>: the version
+ when performing validation
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">newMemory_</span></code>: states whether
+ this object is a new object
+ </li>
+</ul></div>
+<p>
+ Transactional objets must specialize the pure virtual functions * <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span>
+ <span class="special">*</span> <span class="keyword">const</span>
+ <span class="identifier">rhs</span><span class="special">)</span></code>
+ * <code class="computeroutput"><span class="identifier">move_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="special">*</span>
+ <span class="identifier">rhs</span><span class="special">)</span></code>
+ if <code class="computeroutput"><span class="identifier">BUILD_MOVE_SEMANTICS</span></code>
+ * <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code>
+ if <code class="computeroutput"><span class="identifier">BOOST_STM_USE_UNASIGNED_COPY</span></code>
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">copy_state</span></code> is used to copy
+ the backup/working copy to the shared transactional object when the roolback/commit
+ is done direct/defered policy is used.
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">move_state</span></code> is used to move
+ the backup/working copy to the shared transactional object when the roolback/commit
+ is done direct/defered policy is used.
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">cache_deallocate</span></code> is used
+ to release the backup/working copy when the transaction ends if direct/defered
+ policy is used.
+ </p>
+<p>
+ When USE_STM_MEMORY_MANAGER is defined this class provides two functions
+ (<code class="computeroutput"><span class="identifier">retrieve_mem</span></code> and <code class="computeroutput"><span class="identifier">return_mem</span></code>) and to manage a pool of memory.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">base_transaction_object</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+
+ <span class="identifier">base_transaction_object</span><span class="special">();</span>
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">base_transaction_object</span><span class="special">()</span> <span class="special">{};</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">copy_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">*</span> <span class="keyword">const</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">move_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="special">*</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">transaction_thread</span><span class="special">(</span><span class="identifier">thread_id</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">thread_id</span> <span class="identifier">transaction_thread</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">new_memory</span><span class="special">(</span><span class="keyword">bool</span> <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">bool</span> <span class="identifier">new_memory</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+<span class="preprocessor">#if</span> <span class="identifier">BOOST_STM_PERFORMING_VALIDATION</span>
+ <span class="keyword">void</span> <span class="identifier">version</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">rhs</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">version</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="preprocessor">#endif</span>
+
+<span class="preprocessor">#if</span> <span class="identifier">BOOST_STM_USE_MEMORY_MANAGER</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">return_mem</span><span class="special">(</span><span class="keyword">void</span> <span class="special">*</span><span class="identifier">mem</span><span class="special">,</span> <span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">);</span>
+ <span class="keyword">static</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">retrieve_mem</span><span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">);</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">alloc_size</span><span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">);</span>
+<span class="preprocessor">#endif</span>
+
+<span class="preprocessor">#ifdef</span> <span class="identifier">BOOST_STM_USE_UNASIGNED_COPY</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">cache_deallocate</span><span class="special">()=</span><span class="number">0</span><span class="special">;</span>
+<span class="preprocessor">#endif</span>
+</pre>
+<p>
+ };
+ </p>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.constructor__base_transaction_object___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.constructor__base_transaction_object___" title="Constructor base_transaction_object()">Constructor
+ <code class="computeroutput"><span class="identifier">base_transaction_object</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="identifier">base_transaction_object</span><span class="special">();</span>
+</pre>
+<p>
+ Default constructor (ctor) with no parameters allows derived base_transaction_objects
+ to implicitly construct the base_transaction_object base class for easier
+ integration.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_destructor___base_transaction_object___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_destructor___base_transaction_object___" title="Virtual Destructor ~base_transaction_object()">Virtual
+ Destructor <code class="computeroutput"><span class="special">~</span><span class="identifier">base_transaction_object</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">base_transaction_object</span><span class="special">()</span> <span class="special">{};</span>
+</pre>
+<p>
+ Virtual destructor (dtor) ensures correct destructors are called in the
+ inheritance hierarchy for delete operations invoked on base_transaction_object
+ pointers, which occur in numerous places throughout the internal transaction
+ code.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__copy_state___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__copy_state___" title="Virtual function copy_state()">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">copy_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">*</span> <span class="keyword">const</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code>
+ method is called each time global memory is updated, for either direct
+ or deferred updating policies. With this in mind, it is vital that the
+ this object be set to the exact state of the input parameter.
+ </p>
+<p>
+ Derived classes usually simply override this method and perform an <code class="computeroutput"><span class="keyword">operator</span><span class="special">=()</span></code>
+ function call for the specific derived type.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__move_state___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__move_state___" title="Virtual function move_state()">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">move_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="special">*</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+</pre>
+<p>
+ The move_state() method is internally called at deferred updating commit
+ time and at direct updating abort time and invokes the user-defined derived
+ transaction class's move assignment (e.g. operator=(type &amp;&amp;)).
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__retrieve_mem___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__retrieve_mem___" title="Static function retrieve_mem()">Static
+ function <code class="computeroutput"><span class="identifier">retrieve_mem</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">retrieve_mem</span><span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">);</span>
+</pre>
+<p>
+ Static interface into TBoost.STM's memory management system for retrieving
+ memory. The supplied parameter is the requested block size, the return
+ parameter is a void* to the allocated block. Usually access to this interface
+ is done by overloading operator new in the derived base_transaction_object
+ class. Void pointers are the natural and preferred manner to handle memory
+ allocations and deallocations and are therefore safe in this context.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__return_mem___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__return_mem___" title="Static function return_mem()">Static
+ function <code class="computeroutput"><span class="identifier">return_mem</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">return_mem</span><span class="special">(</span><span class="keyword">void</span> <span class="special">*</span><span class="identifier">mem</span><span class="special">,</span> <span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">);</span>
+</pre>
+<p>
+ Static interface into TBoost.STM's memory management system for returning
+ memory. The first parameter points to the memory block being returned,
+ the second parameter specifies its size. Usually access to this interface
+ is done by overloading operator delete in the derived transaction object
+ class. Void pointers are the natural and preferred manner to handle memory
+ allocations and deallocations and are therefore safe in this context.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__alloc_size___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.static_function__alloc_size___" title="Static function alloc_size()">Static
+ function <code class="computeroutput"><span class="identifier">alloc_size</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">alloc_size</span><span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">);</span>
+</pre>
+<p>
+ Static interface into TBoost.STM's memory management system which allows
+ the user to specify the allocation chunk size for the memory manager.
+ The input parameter specifies the number of transactional objects that
+ should be allocated at startup and with each subsequent buffer increase.
+ If no size is specified, the allocation chunk size uses TBoost.STM's
+ default value, currently 8192. The alloc_size() interface can be reconfigured
+ at runtime and is used upon the next buffer increase.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__cache_deallocate___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.abstract_class__base_transaction_object_.virtual_function__cache_deallocate___" title="Virtual function cache_deallocate()">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">cache_deallocate</span><span class="special">()=</span><span class="number">0</span><span class="special">;</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___" title="Template Class transaction_object&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">transaction_object</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__copy_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__move_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__cache_deallocate___">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ To further simplify the usage of TBoost.STM, an intermediate template class
+ was built which is meant to sit between the base_transaction_object and
+ the user-defined transaction objects. The purpose of this intermediate
+ class is to reduce the code overhead needed for user-defined transaction
+ objects. To do this, the curiously recurring template pattern developed
+ by James Coplien was used.
+ </p>
+<p>
+ With the templatized transaction_object, client-side transaction objects
+ need only to derive from it and pass their class type as its template parameter.
+ At compile-time the transaction_object generates the necessary code to
+ override copy_state() and implement operator new and operator delete using
+ TBoost.STM's memory manager for all user-defined types derived from it.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Derived</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">transaction_object</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">base_transaction_object</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">copy_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">*</span> <span class="keyword">const</span> <span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">move_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__copy_state___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__copy_state___" title="Virtual function copy_state()">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">copy_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">*</span> <span class="keyword">const</span> <span class="identifier">rhs</span><span class="special">);</span>
+</pre>
+<p>
+ The copy_state() method call to the free function cache_restore which
+ do a unitialized_copy by default.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__move_state___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__move_state___" title="Virtual function move_state()">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">move_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span>
+</pre>
+<p>
+ The move_state() method call to the free function cache_restore which
+ do a unitialized_copy by default.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__cache_deallocate___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transaction_object___.virtual_function__cache_deallocate___" title="Virtual function cache_deallocate()">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">cache_deallocate</span><span class="special">()=</span><span class="number">0</span><span class="special">;</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__native_trans___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__native_trans___" title="Template Class native_trans&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">native_trans</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">native_trans</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">transaction_object</span><span class="special">&lt;</span> <span class="identifier">native_trans</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">native_trans</span><span class="special">(){}</span>
+ <span class="identifier">native_trans</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="identifier">native_trans</span><span class="special">(</span><span class="identifier">native_trans</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="identifier">native_trans</span><span class="special">(</span><span class="identifier">native_trans</span> <span class="special">&amp;&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="identifier">native_trans</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">native_trans</span> <span class="special">&amp;&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+
+ <span class="identifier">native_trans</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+
+ <span class="identifier">native_trans</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">--();</span>
+ <span class="identifier">native_trans</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span>
+ <span class="identifier">native_trans</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++();</span>
+ <span class="identifier">native_trans</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+ <span class="identifier">native_trans</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="identifier">native_trans</span> <span class="keyword">operator</span><span class="special">+(</span><span class="identifier">native_trans</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+
+ <span class="keyword">operator</span> <span class="identifier">T</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">value</span><span class="special">();</span>
+ <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">value</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___" title="Template Class transactional_object&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">transactional_object</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__copy_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__move_state___">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__cache_deallocate___">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ Transactional object wrapper. A <code class="computeroutput"><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is a base_transaction_object wrapping
+ an instance of type T. Provides the definition of the virtual functions
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ forward constructors to the wrapped type
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">copy_state</span></code>: relaying
+ on the cache_restore&lt;T&gt; generic function
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">move_state</span></code> and
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">cache_deallocate</span></code>: relaying
+ on the cache_restore&lt;T&gt; generic function
+ </li>
+</ul></div>
+<p>
+ Defines in addition the functions <code class="computeroutput"><span class="keyword">new</span></code>
+ and <code class="computeroutput"><span class="keyword">delete</span></code> when <code class="computeroutput"><span class="identifier">BOOST_STM_USE_MEMORY_MANAGER</span></code> is defined
+ </p>
+<p>
+ If a class D inherits from B we have that <code class="computeroutput"><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;</span></code> dont inherits from <code class="computeroutput"><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span></code>, but we can static/dynamic cast them
+ robustly.
+ </p>
+<p>
+ Evidently the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="keyword">static_cast</span></code>/<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="keyword">dynamic_cast</span></code>
+ do not works. We need to define the specific cast
+ </p>
+<pre class="programlisting"><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;*</span> <span class="identifier">d</span><span class="special">=...;</span>
+<span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;*</span> <span class="identifier">b</span><span class="special">=</span><span class="identifier">tx_static_cast</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;(</span><span class="identifier">d</span><span class="special">);</span>
+
+<span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;*</span> <span class="identifier">b</span><span class="special">=...;</span>
+<span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;*</span> <span class="identifier">d</span><span class="special">=</span><span class="identifier">tx_dynamic_cast</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Synopsis
+ </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">transactional_object</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">base_transaction_object</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">T</span> <span class="identifier">value</span><span class="special">;</span>
+
+ <span class="identifier">transactional_object</span><span class="special">();</span>
+ <span class="identifier">transactional_object</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">*</span><span class="identifier">ptr</span><span class="special">);</span>
+ <span class="identifier">transactional_object</span><span class="special">(</span><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">&gt;</span>
+ <span class="identifier">transactional_object</span><span class="special">(</span><span class="identifier">T1</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">p1</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span><span class="special">&gt;</span>
+ <span class="identifier">transactional_object</span><span class="special">(</span><span class="identifier">T1</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">T2</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">p2</span><span class="special">);</span>
+
+ <span class="identifier">transactional_object</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">transactional_object</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">copy_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">*</span> <span class="keyword">const</span> <span class="identifier">rhs</span><span class="special">);</span>
+
+<span class="preprocessor">#ifdef</span> <span class="identifier">BOOST_STM_USE_UNASIGNED_COPY</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">cache_deallocate</span><span class="special">();</span>
+<span class="preprocessor">#endif</span>
+
+<span class="preprocessor">#if</span> <span class="identifier">BOST_STM_USE_MEMORY_MANAGER</span>
+ <span class="keyword">void</span><span class="special">*</span> <span class="keyword">operator</span> <span class="keyword">new</span><span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">)</span> <span class="keyword">throw</span> <span class="special">();</span>
+ <span class="keyword">void</span> <span class="keyword">operator</span> <span class="keyword">delete</span><span class="special">(</span><span class="keyword">void</span><span class="special">*</span> <span class="identifier">mem</span><span class="special">);</span>
+<span class="preprocessor">#endif</span>
+
+<span class="special">};</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__copy_state___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__copy_state___" title="Virtual function copy_state()">Virtual
+ function <code class="computeroutput"><span class="identifier">copy_state</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">copy_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="keyword">const</span> <span class="special">*</span> <span class="keyword">const</span> <span class="identifier">rhs</span><span class="special">);</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__move_state___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__move_state___" title="Virtual function move_state()">Virtual
+ function <code class="computeroutput"><span class="identifier">move_state</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">move_state</span><span class="special">(</span><span class="identifier">base_transaction_object</span> <span class="special">*</span> <span class="identifier">rhs</span><span class="special">);</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__cache_deallocate___"></a><a class="link" href="transaction_object_hpp.html#toward_boost_stm.reference.transaction_object_hpp.template_class__transactional_object___.virtual_function__cache_deallocate___" title="Virtual function cache_deallocate()">Virtual
+ function <code class="computeroutput"><span class="identifier">cache_deallocate</span><span class="special">()</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">cache_deallocate</span><span class="special">()=</span><span class="number">0</span><span class="special">;</span>
+</pre>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="transaction_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tx_ptr_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/tx_ptr_hpp.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/reference/tx_ptr_hpp.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,359 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header &lt;boost/stm/tx_ptr.hpp&gt;</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="transaction_object_hpp.html" title="Header &lt;boost/stm/transaction_object.hpp&gt;">
+<link rel="next" href="base_contention_manager_hpp.html" title="Header &lt;boost/stm/base_contention_manager.hpp&gt;">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="transaction_object_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="base_contention_manager_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.reference.tx_ptr_hpp"></a><a class="link" href="tx_ptr_hpp.html" title="Header &lt;boost/stm/tx_ptr.hpp&gt;"> Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">tx_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="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__tx_obj___">Template
+ Class <code class="computeroutput"><span class="identifier">tx_obj</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__tx_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">tx_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__rd_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">rd_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__upgrd_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">upgrd_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__wr_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">wr_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__read_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">read_ptr</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__write_ptr___">Template
+ Class <code class="computeroutput"><span class="identifier">write_ptr</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">stm</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">tx_obj</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;</span> <span class="identifier">rhs</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;</span> <span class="identifier">rhs</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&amp;</span> <span class="identifier">rhs</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;</span> <span class="identifier">rhs</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&amp;</span> <span class="identifier">b</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">tx_ptr</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;</span> <span class="identifier">rhs</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&amp;</span> <span class="identifier">b</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">void</span> <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">ptr</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">void</span> <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">transaction</span><span class="special">&amp;</span> <span class="identifier">tx</span><span class="special">,</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">ptr</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">tx_static_cast</span><span class="special">(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span> <span class="identifier">ptr</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">,</span> <span class="keyword">typename</span> <span class="identifier">U</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">tx_dynamic_cast</span><span class="special">(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span> <span class="identifier">ptr</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">rd_ptr</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="identifier">rd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_rd_ptr</span><span class="special">(</span><span class="identifier">transaction</span><span class="special">&amp;</span> <span class="identifier">tx</span><span class="special">,</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">ptr</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="identifier">rd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_rd_ptr</span><span class="special">(</span><span class="identifier">transaction</span><span class="special">&amp;</span> <span class="identifier">tx</span><span class="special">,</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">ref</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="identifier">rd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_rd_ptr</span><span class="special">(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">ptr</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="identifier">rd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_rd_ptr</span><span class="special">(</span><span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">ref</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">void</span> <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">rd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">ptr</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">void</span> <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">transaction</span><span class="special">&amp;</span> <span class="identifier">tx</span><span class="special">,</span> <span class="identifier">rd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">ptr</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">upgrd_ptr</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">void</span> <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">ptr</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">void</span> <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">transaction</span><span class="special">&amp;</span> <span class="identifier">tx</span><span class="special">,</span> <span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">ptr</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">wr_ptr</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="identifier">wr_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_wr_ptr</span><span class="special">(</span><span class="identifier">transaction</span><span class="special">&amp;</span> <span class="identifier">tx</span><span class="special">,</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">ptr</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="identifier">wr_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_wr_ptr</span><span class="special">(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">ptr</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">void</span> <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">wr_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">ptr</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">void</span> <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">transaction</span><span class="special">&amp;</span> <span class="identifier">tx</span><span class="special">,</span> <span class="identifier">wr_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">ptr</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">read_ptr</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">write_ptr</span><span class="special">;</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.tx_ptr_hpp.template_class__tx_obj___"></a><a class="link" href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__tx_obj___" title="Template Class tx_obj&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">tx_obj</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ tx_obj is a kind of smart pointer to a wrapped transactional_object T providing
+ builting operators
+ </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">tx_obj</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">tx_obj</span><span class="special">();</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">ctypename</span> <span class="identifier">Y</span><span class="special">&gt;</span> <span class="identifier">tx_obj</span><span class="special">(</span><span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">&gt;</span> <span class="identifier">tx_obj</span><span class="special">(</span><span class="identifier">T1</span> <span class="identifier">p1</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="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="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="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">();</span>
+ <span class="keyword">const</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">&amp;</span> <span class="identifier">ref</span><span class="special">();</span>
+ <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">ref</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="identifier">tx_obj</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">--();</span>
+ <span class="identifier">T</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span>
+
+ <span class="identifier">tx_obj</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++();</span>
+ <span class="identifier">T</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+
+ <span class="identifier">tx_obj</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">);</span>
+ <span class="identifier">T</span> <span class="keyword">operator</span><span class="special">+(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.tx_ptr_hpp.template_class__tx_ptr___"></a><a class="link" href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__tx_ptr___" title="Template Class tx_ptr&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">tx_ptr</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ a tx_ptr&lt;T&gt; is an smart pointer to a transactional_object&lt;T&gt;
+ (which contains an instance of T). Reference fields in linked structures
+ should always be tx_ptrs. The result of derreferencing it will be the pointer
+ to the T instance When this pointer is derreference on a transaction the
+ transactional_object&lt;T&gt; is set a written and the transaction specific
+ storage will be used. Otherwise the shared storage is used.
+ </p>
+<p>
+ Used to initialize a rd_ptr&lt;T&gt;, wr_ptr&lt;T&gt;, or upgrd_ptr&lt;T&gt;.
+ </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">tx_ptr</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">this_type</span><span class="special">;</span>
+
+ <span class="identifier">tx_ptr</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">explicit</span> <span class="identifier">tx_ptr</span><span class="special">(</span><span class="identifier">Y</span> <span class="special">*</span> <span class="identifier">ptr</span><span class="special">);</span>
+ <span class="keyword">explicit</span> <span class="identifier">tx_ptr</span><span class="special">(</span><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">ptr</span><span class="special">);</span>
+ <span class="identifier">tx_ptr</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">r</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="identifier">tx_ptr</span><span class="special">(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</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="identifier">tx_ptr</span><span class="special">(</span><span class="identifier">rd_ptr</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</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="identifier">tx_ptr</span><span class="special">(</span><span class="identifier">wr_ptr</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</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="identifier">tx_ptr</span><span class="special">(</span><span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</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="identifier">tx_ptr</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;*</span> <span class="identifier">ptr</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="identifier">tx_ptr</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</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="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="keyword">typedef</span> <span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">this_type</span><span class="special">::*</span><span class="identifier">unspecified_bool_type</span><span class="special">;</span>
+
+ <span class="keyword">operator</span> <span class="identifier">unspecified_bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">tx_ptr</span> <span class="special">&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.tx_ptr_hpp.template_class__rd_ptr___"></a><a class="link" href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__rd_ptr___" title="Template Class rd_ptr&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">rd_ptr</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ A rd_ptr&lt;T&gt; ("read pointer") points to an object that the
+ current transaction has opened for read only access. You can only call
+ a const method through a read pointer.
+ </p>
+<p>
+ A rd_ptr&lt;T&gt; is constructed from an tx_ptr&lt;T&gt; through an explicit
+ constructor. Once a rd_ptr&lt;T&gt; has been constructed, an tx_ptr&lt;T&gt;
+ can be opened for reading simply by assignment (operator=()) into the constructed
+ rd_ptr&lt;T&gt;.
+ </p>
+<p>
+ It is not safe to derreference a rd_ptr&lt;T&gt; after having assigned
+ the same tx_ptr&lt;T&gt; to a wr_ptr&lt;T&gt;. If this is the case the
+ readen value do not match the writen one. If it is possible to write on
+ the same transaction use upgrd_ptr instead which is safe.
+ </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">rd_ptr</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">rd_ptr</span><span class="special">(</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">tx_obj</span><span class="special">);</span>
+ <span class="identifier">rd_ptr</span><span class="special">(</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">tx_obj</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="identifier">rd_ptr</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="identifier">r</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="identifier">rd_ptr</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+
+ <span class="keyword">const</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="keyword">inline</span> <span class="keyword">const</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">inline</span> <span class="keyword">const</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="keyword">operator</span> <span class="identifier">unspecified_bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.tx_ptr_hpp.template_class__upgrd_ptr___"></a><a class="link" href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__upgrd_ptr___" title="Template Class upgrd_ptr&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">upgrd_ptr</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ A upgrd_ptr&lt;T&gt; ("upgradable pointer") points to an object
+ that the current transaction has opened for read only access.
+ </p>
+<p>
+ You can only call const method of the wrapped type through a upgradable
+ pointer.
+ </p>
+<p>
+ A upgrd_ptr&lt;T&gt; is constructed from an tx_ptr&lt;T&gt; through a constructor
+ having also the transaction as parameter. Once a rd_ptr&lt;T&gt; has been
+ constructed, an tx_ptr&lt;T&gt; can be opened for reading simply by assignment
+ (operator=()) into the constructed rd_ptr&lt;T&gt;.
+ </p>
+<p>
+ It is safe to derreference a rd_ptr&lt;T&gt; after having assigned the
+ same tx_ptr&lt;T&gt; to a wr_ptr&lt;T&gt;.
+ </p>
+<p>
+ A upgrd_ptr&lt;T&gt; can be upgraded to a wr_ptr&lt;T&gt; through a constructor.
+ </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">upgrd_ptr</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+
+ <span class="keyword">inline</span> <span class="identifier">upgrd_ptr</span><span class="special">(</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">tx_obj</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="identifier">upgrd_ptr</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+
+ <span class="keyword">const</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="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</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">inline</span> <span class="identifier">T</span> <span class="keyword">const</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="keyword">operator</span> <span class="identifier">unspecified_bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">write_ptr</span><span class="special">(</span><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">ptr</span><span class="special">);</span>
+ <span class="identifier">T</span><span class="special">*</span> <span class="identifier">write_ptr</span><span class="special">();</span>
+
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.tx_ptr_hpp.template_class__wr_ptr___"></a><a class="link" href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__wr_ptr___" title="Template Class wr_ptr&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">wr_ptr</span><span class="special">&lt;&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ A wr_ptr&lt;T&gt; ("write pointer") points to a shared object
+ that the current transaction has opened for writing.
+ </p>
+<p>
+ A wr_ptr&lt;T&gt; is initialized explicitly from an tx_ptr&lt;T&gt;.
+ </p>
+<p>
+ A wr_ptr&lt;T&gt; can also be explicitly constructed from a upgrd_ptr&lt;T&gt;
+ as an upgrade-to-writable operation.
+ </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">wr_ptr</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">wr_ptr</span><span class="special">(</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">tx_obj</span><span class="special">);</span>
+
+ <span class="identifier">wr_ptr</span><span class="special">(</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">tx_obj</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">inline</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*();</span>
+ <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;();</span>
+
+ <span class="keyword">operator</span> <span class="identifier">unspecified_bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.tx_ptr_hpp.template_class__read_ptr___"></a><a class="link" href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__read_ptr___" title="Template Class read_ptr&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">read_ptr</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">read_ptr</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">inline</span> <span class="identifier">read_ptr</span><span class="special">(</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">tx_obj</span><span class="special">);</span>
+ <span class="keyword">const</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="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</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">inline</span> <span class="identifier">T</span> <span class="keyword">const</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="keyword">inline</span> <span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">trans</span><span class="special">();</span>
+ <span class="identifier">T</span><span class="special">*</span> <span class="identifier">write_ptr</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.reference.tx_ptr_hpp.template_class__write_ptr___"></a><a class="link" href="tx_ptr_hpp.html#toward_boost_stm.reference.tx_ptr_hpp.template_class__write_ptr___" title="Template Class write_ptr&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">write_ptr</span><span class="special">&lt;&gt;</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">T</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">write_ptr</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">inline</span> <span class="identifier">write_ptr</span><span class="special">(</span><span class="identifier">transaction</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&amp;</span> <span class="identifier">tx_obj</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="keyword">inline</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*();</span>
+ <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;();</span>
+</pre>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="transaction_object_hpp.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="base_contention_manager_hpp.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,67 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Users'Guide</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="prev" href="overview/intro.html" title="Introduction">
+<link rel="next" href="users_guide/getting_started.html" title="Getting Started">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="overview/intro.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="users_guide/getting_started.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_stm.users_guide"></a><a class="link" href="users_guide.html" title="Users'Guide"> Users'Guide</a>
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="users_guide/getting_started.html"> Getting
+ Started</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="users_guide/getting_started.html#toward_boost_stm.users_guide.getting_started.install">
+ Installing STM</a></span></dt>
+<dt><span class="section"><a href="users_guide/getting_started.html#toward_boost_stm.users_guide.getting_started.hello_world__">Hello
+ World! </a></span></dt>
+</dl></dd>
+<dt><span class="section"> Tutorial</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="users_guide/tutorial.html#toward_boost_stm.users_guide.tutorial.a_simple_transaction">A
+ Simple Transaction</a></span></dt>
+<dt><span class="section"><a href="users_guide/tutorial.html#toward_boost_stm.users_guide.tutorial.a_composable_transaction">A
+ Composable Transaction</a></span></dt>
+<dt><span class="section"><a href="users_guide/tutorial.html#toward_boost_stm.users_guide.tutorial.a_dynamically_prioritized__composed_transaction">A
+ Dynamically Prioritized, Composed Transaction</a></span></dt>
+</dl></dd>
+<dt><span class="section"> References</span></dt>
+<dt><span class="section"> Glossary</span></dt>
+</dl></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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="overview/intro.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="users_guide/getting_started.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/ext_references.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/ext_references.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,132 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>References</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../users_guide.html" title="Users'Guide">
+<link rel="prev" href="tutorial.html" title="Tutorial">
+<link rel="next" href="glosary.html" title="Glossary">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tutorial.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../users_guide.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="glosary.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.users_guide.ext_references"></a><a class="link" href="ext_references.html" title="References"> References</a>
+</h3></div></div></div>
+<p>
+ For details on the underlying software architecture of TBoost.STM, including
+ explanations of its API, please refer to our summary paper.
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"> <a href="http://eces.colorado.edu/~gottschl/tboostSTM/pubs/lcsd07-dracostm.pdf" target="_top"><span class="bold"><strong>DracoSTM: A Practical C++ Approach to Software Transactional
+ Memory</strong></span></a></span></dt>
+<dd><p>
+ Justin E. Gottschlich and Daniel A. Connors - <span class="emphasis"><em>Proceedings of
+ the ACM SIGPLAN Symposium on Library-Centric Software Design (LCSD),
+ October 2007</em></span>
+ </p></dd>
+</dl>
+</div>
+<p>
+ TBoost.STM uses a novel method of consistency checking called invalidation.
+ Invalidation can assist in both high performance and strict contention management
+ control. For more information on how invalidation can improve overall system
+ performance and ensure true user-defined contention management policies,
+ see our below research papers.
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"> <a href="http://eces.colorado.edu/~gottschl/tboostSTM/pubs/podc08_full_paper.pdf" target="_top"><span class="bold"><strong>A Consistency Checking Optimization Algorithm for Memory-Intensive
+ Transactions</strong></span></a></span></dt>
+<dd><p>
+ Justin E. Gottschlich, Daniel A. Connors and Jeremy G. Siek - <span class="emphasis"><em>Proceedings
+ of the ACM SIGACT-SIGOPS Symposium on Principles of Distributed Computing
+ (PODC) (brief announcement), August 2008</em></span>
+ </p></dd>
+<dt><span class="term"> <a href="http://eces.colorado.edu/~gottschl/tboostSTM/pubs/epham08-stm.pdf" target="_top"><span class="bold"><strong>Extending Contention Managers for User-Defined Priority Based
+ Transactions</strong></span></a></span></dt>
+<dd><p>
+ Justin E. Gottschlich and Daniel A. Connors - <span class="emphasis"><em>Proceedings of
+ the ACM Workshop on Exploiting Parallelism with Transactional Memory
+ and other Hardware Assisted Methods (EPHAM), April 2008</em></span>
+ </p></dd>
+</dl>
+</div>
+<p>
+ TBoost.STM supports transaction-lock interaction. This support allows existing
+ lock-based parallel code to interact safely with transactions. In addition,
+ we provide three types of transaction-lock interaction with varying degrees
+ of performance. Please see our research paper for more details.
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"> Lock-Aware Transactional Memory and Composable Locks</span></dt>
+<dd><p>
+ Justin E. Gottschlich, Daniel A. Connors and Jeremy G. Siek -
+ </p></dd>
+</dl>
+</div>
+<p>
+ TBoost.STM uses the last C++ features to provide a friendly and efficient
+ interface. See the following papers to see how.
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"> Toward Simplified Parallel Support in C++</span></dt>
+<dd><p>
+ Justin E. Gottschlich, Jeremy G. Siek, Paul J. Rogers, and Manish Vachharajani
+ - <span class="emphasis"><em>BoostCon'09, the Third Boost Libraries Conference, May 2009</em></span>
+ </p></dd>
+<dt><span class="term"> <a href="http://eces.colorado.edu/~gottschl/tboostSTM/pubs/icooolps08-exception.pdf" target="_top"><span class="bold"><strong>C++ Move Semantics for Exception Safety and Optimization in Software
+ Transactional Memory Libraries</strong></span></a></span></dt>
+<dd><p>
+ Justin E. Gottschlich, Jeremy G. Siek and Daniel A. Connors - <span class="emphasis"><em>International
+ Workshop on Implementation, Compilation, Optimization of Object-Oriented
+ Languages, Programs and Systems (ICOOOLPS), July 2008</em></span>
+ </p></dd>
+</dl>
+</div>
+<p>
+ Check for the last updates.
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term"> TBoost.STM (or Related) Peer-Reviewed Publications</span></dt>
+<dd><p>
+ </p></dd>
+</dl>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tutorial.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../users_guide.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="glosary.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/getting_started.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/getting_started.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,230 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Getting Started</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../users_guide.html" title="Users'Guide">
+<link rel="prev" href="../users_guide.html" title="Users'Guide">
+<link rel="next" href="tutorial.html" title="Tutorial">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../users_guide.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../users_guide.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorial.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.users_guide.getting_started"></a><a class="link" href="getting_started.html" title="Getting Started"> Getting
+ Started</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="getting_started.html#toward_boost_stm.users_guide.getting_started.install">
+ Installing STM</a></span></dt>
+<dt><span class="section"><a href="getting_started.html#toward_boost_stm.users_guide.getting_started.hello_world__">Hello
+ World! </a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.users_guide.getting_started.install"></a><a class="link" href="getting_started.html#toward_boost_stm.users_guide.getting_started.install" title="Installing STM">
+ Installing STM</a>
+</h4></div></div></div>
+<p>
+ TBoost.STM is currently in an alpha release stage. This means our STM library
+ is downloadable, but is undergoing some fundamental changes. Furthermore,
+ our alpha release of TBoost.STM may exhibit some stability issues. While
+ our internal tests have shown TBoost.STM to be fairly stable, your usage
+ may vary.
+ </p>
+<p>
+ TBoost.STM's current alpha download is mainly intended for other researchers
+ who are curious about TBoost.STM's implementation and transactional memory.
+ While we encourage non-TM experts to download the library and explore writing
+ parallel code within its framework, we want such users know the system
+ is in its early stages. As such, your usage of TBoost.STM may reveal some
+ weaknesses or stability issues. Until we are into a fully released version,
+ these issues are to be expected. However, please let us know if you encounter
+ any problems using our library and we will do our best to resolve such
+ issues immediately.
+ </p>
+<p>
+ Thank you for considering TBoost.STM and we hope you enjoy exploring transactional
+ memory!
+ </p>
+<a name="toward_boost_stm.users_guide.getting_started.install.getting_boost_stm"></a><h6>
+<a name="id4849074"></a>
+ <a class="link" href="getting_started.html#toward_boost_stm.users_guide.getting_started.install.getting_boost_stm">Getting
+ Boost.STM</a>
+ </h6>
+<p>
+ Visit our Toward Boost.Stm <a href="http://eces.colorado.edu/~gottschl/tboostSTM/index.html" target="_top">home
+ page</a> be aware of the last news.
+ </p>
+<p>
+ You can get the last stable release of from the <a href="http://eces.colorado.edu/~gottschl/tboostSTM/downloads.html" target="_top">Download
+ page</a>.
+ </p>
+<p>
+ You can also access the latest (unstable?) state from the <a href="https://svn.boost.org/svn/boost/sandbox/stm" target="_top">Boost
+ Sandbox</a>.
+ </p>
+<a name="toward_boost_stm.users_guide.getting_started.install.building_boost_stm"></a><h6>
+<a name="id4849128"></a>
+ <a class="link" href="getting_started.html#toward_boost_stm.users_guide.getting_started.install.building_boost_stm">Building
+ Boost.STM</a>
+ </h6>
+<p>
+ Boost.STM is not a header only library. You need to compile it before use.
+ </p>
+<pre class="programlisting"><span class="identifier">cd</span> <span class="identifier">libs</span><span class="special">/</span><span class="identifier">stm</span><span class="special">/</span><span class="identifier">build</span>
+<span class="identifier">bjam</span>
+</pre>
+<a name="toward_boost_stm.users_guide.getting_started.install.requirements"></a><h6>
+<a name="id4849192"></a>
+ <a class="link" href="getting_started.html#toward_boost_stm.users_guide.getting_started.install.requirements">Requirements</a>
+ </h6>
+<p>
+ The POSIX threads (pthreads) library is needed to use TBoost.STM. Pthreads
+ is part of the standard deployment for almost all Unix / Linux flavors,
+ however, it is not standard in Windows. If you are doing Windows development
+ you can find the POSIX threads library at the below link: <a href="http://sourceware.org/pthreads-win32/" target="_top">POSIX
+ threads (pthreads) for Windows</a>
+ </p>
+<p>
+ In order to be more portable <span class="bold"><strong>Boost.STM</strong></span>
+ is migrating to Boost. You should use either Boost version 1.39.x or the
+ version in SVN trunk (even if Boost version 1.35.x should works also).
+ In particular, <span class="bold"><strong>Boost.STM</strong></span> will depends
+ on:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Boost.DynamicBitset</span></dt>
+<dd><p>
+ dynamic_bitsets
+ </p></dd>
+<dt><span class="term">Boost.Thread from Anthony Williams</span></dt>
+<dd><p>
+ threads and synchronization primitives
+ </p></dd>
+</dl>
+</div>
+<p>
+ In addition Boost.Stm will uses the following libraries on the Boost Sandbox
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Boost.Chrono from Vicente J. Botet Escriba</span></dt>
+<dd><p>
+ Standard Chrono library
+ </p></dd>
+<dt><span class="term">Boost.Synchro from Vicente J. Botet Escriba</span></dt>
+<dd><p>
+ Exception based timed locks synchronization primitives &amp; Language-like
+ Synchronized Block
+ </p></dd>
+</dl>
+</div>
+<a name="toward_boost_stm.users_guide.getting_started.install.exceptions_safety"></a><h6>
+<a name="id4849352"></a>
+ <a class="link" href="getting_started.html#toward_boost_stm.users_guide.getting_started.install.exceptions_safety">Exceptions
+ safety</a>
+ </h6>
+<p>
+ All functions in the library are exception-neutral and provide strong guarantee
+ of exception safety as long as the underlying parameters provide it.
+ </p>
+<a name="toward_boost_stm.users_guide.getting_started.install.thread_safety"></a><h6>
+<a name="id4849378"></a>
+ <a class="link" href="getting_started.html#toward_boost_stm.users_guide.getting_started.install.thread_safety">Thread
+ safety</a>
+ </h6>
+<p>
+ All functions in the library are thread-unsafe except when noted explicitly.
+ </p>
+<a name="toward_boost_stm.users_guide.getting_started.install.tested_compilers"></a><h6>
+<a name="id4849405"></a>
+ <a class="link" href="getting_started.html#toward_boost_stm.users_guide.getting_started.install.tested_compilers">Tested
+ compilers</a>
+ </h6>
+<p>
+ Currently, <span class="bold"><strong>Boost.STM</strong></span> has been tested in
+ the following compilers/platforms:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Visual Studio 6 - Windows
+ </li>
+<li>
+ GCC 3.4.4 - Cygwin
+ </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/html/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Please send any questions, comments and bug reports to boost &lt;at&gt;
+ lists &lt;dot&gt; boost &lt;dot&gt; org
+ </p></td></tr>
+</table></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.users_guide.getting_started.hello_world__"></a><a class="link" href="getting_started.html#toward_boost_stm.users_guide.getting_started.hello_world__" title="Hello World!">Hello
+ World! </a>
+</h4></div></div></div>
+<p>
+ The below example gives a basic introduction into TBoost.STM's transactional
+ framework and demonstrates TBoost.STM's ACI conformance.
+ </p>
+<pre class="programlisting"><span class="identifier">tx_obj</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">counter</span><span class="special">;</span>
+
+<span class="keyword">int</span> <span class="identifier">increment</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">int</span> <span class="identifier">val</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">use_atomic</span><span class="special">(</span><span class="identifier">_</span><span class="special">)</span> <span class="special">{</span>
+ <span class="special">(*</span><span class="identifier">counter</span><span class="special">)++;</span>
+ <span class="identifier">val</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">counter</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="keyword">return</span> <span class="identifier">val</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ In the above example, (A) both the write on global_int and the read operations
+ function atomically or neither operations are performed. In addition, (C)
+ the transaction begins and ends in legal memory states, meaning global
+ int is guaranteed to be read correctly, preventing thread data races from
+ causing inconsistent results. Lastly, (I) the intermediate state of the
+ incremented global int is isolated until the transaction commits. These
+ three attributes fulfill TBoost.STM's conformance to the ACI principles.
+ The above example also gives a basic introduction into TBoost.STM's transactional
+ framework.
+ </p>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../users_guide.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../users_guide.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorial.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/glosary.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/glosary.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,124 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Glossary</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../users_guide.html" title="Users'Guide">
+<link rel="prev" href="ext_references.html" title="References">
+<link rel="next" href="../reference.html" title="Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="ext_references.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../users_guide.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.users_guide.glosary"></a><a class="link" href="glosary.html" title="Glossary"> Glossary</a>
+</h3></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">in fligh transaction</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">latm</span></dt>
+<dd><p>
+ lock aware transaction memory
+ </p></dd>
+<dt><span class="term">STM</span></dt>
+<dd><p>
+ Software Transaction Memory
+ </p></dd>
+<dt><span class="term">Conflict Detection</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">abort</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">commit</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">Consistency Checking</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">Direct Updating</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">Deferred Updating</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">LiT</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">LoT</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">Irrevocable transaction</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">Isolated transaction</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">Full-Lock protection</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">TM-Lock protection</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">TX-Lock protection</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">commit</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">commit</span></dt>
+<dd><p>
+ .
+ </p></dd>
+<dt><span class="term">commit</span></dt>
+<dd><p>
+ .
+ </p></dd>
+</dl>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="ext_references.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../users_guide.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/tutorial.html
==============================================================================
--- (empty file)
+++ sandbox/stm/branches/vbe/libs/stm/doc/html/toward_boost_stm/users_guide/tutorial.html 2009-09-18 13:48:10 EDT (Fri, 18 Sep 2009)
@@ -0,0 +1,564 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Tutorial</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
+<link rel="start" href="../../index.html" title="Chapter 1. Toward.Boost.STM">
+<link rel="up" href="../users_guide.html" title="Users'Guide">
+<link rel="prev" href="getting_started.html" title="Getting Started">
+<link rel="next" href="ext_references.html" title="References">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="TowardBoostSTM" width="277" height="86" src="../../../image/Toward_Boost_STM.jpg"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="getting_started.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../users_guide.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="ext_references.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_stm.users_guide.tutorial"></a><a class="link" href="tutorial.html" title="Tutorial"> Tutorial</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_simple_transaction">A
+ Simple Transaction</a></span></dt>
+<dt><span class="section"><a href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_composable_transaction">A
+ Composable Transaction</a></span></dt>
+<dt><span class="section"><a href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_dynamically_prioritized__composed_transaction">A
+ Dynamically Prioritized, Composed Transaction</a></span></dt>
+</dl></div>
+<p>
+ A number of example transactions are presented in this section using the
+ TBoost.STM library. The first example illustrates how to write a transactional
+ linked list insert operation. The second example demonstrates composition,
+ combining a transactional insert operation with a transactional remove operation
+ which compose into a larger, single move transaction. Next, a minor but important
+ detail regarding memory addresses within the transactional workspace is given.
+ Finally, an example of how to handle priority inversion for validating and
+ invalidating consistency schemes using TBoost.STM's extensible contention
+ manager and compositional framework is provided. The final example demonstrates
+ a number of important aspects of TBoost.STM's implementation, such as, differing
+ priority inversion mechanics for different consistency models, transactional
+ attribute enrichment via composition and threaded memory sharing amongst
+ transactions.
+ </p>
+<p>
+ While most of the examples are intuitive and a complete understanding of
+ the TBoost.STM API is not needed for a high-level understanding of its functionality,
+ a complete description of all interfaces used below can found in referenced
+ section.
+ </p>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.users_guide.tutorial.a_simple_transaction"></a><a class="link" href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_simple_transaction" title="A Simple Transaction">A
+ Simple Transaction</a>
+</h4></div></div></div>
+<p>
+ In this example, we build a linked list insert transactional operation
+ using TBoost.STM. The example is shown in three segments: the client code
+ which inserts 100 items into the list, the insert operation which client
+ code calls, the internal insert operation which the exposed insert operation
+ calls.
+ </p>
+<a name="toward_boost_stm.users_guide.tutorial.a_simple_transaction.client_invoked_inserts"></a><h6>
+<a name="id4849752"></a>
+ <a class="link" href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_simple_transaction.client_invoked_inserts">Client
+ Invoked Inserts</a>
+ </h6>
+<pre class="programlisting"><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">linked_list</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">llist</span><span class="special">;</span>
+<span class="special">...</span>
+<span class="identifier">atomic</span><span class="special">(</span><span class="identifier">_</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="number">100</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">llist</span><span class="special">-&gt;</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">i</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ After inspecting the above client invoked insert code it is apparent that
+ the code itself shows no deep signs of being transactional. The two exceptions
+ are the declaration of the list using a tx_ptr smart pointer and the fact
+ that the insertion of te 100 elements is atomic. This is our desired behavior.
+ As far as the client side programmer is concerned, there is no additional
+ code needed to perform a transactional linked list insert over a non-transactional
+ linked list insert. Obviously, this simplistic behavior eases the introduction
+ of TM solutions into algorithms of new and legacy systems.
+ </p>
+<a name="toward_boost_stm.users_guide.tutorial.a_simple_transaction.linked_list_declaration"></a><h6>
+<a name="id4803994"></a>
+ <a class="link" href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_simple_transaction.linked_list_declaration">Linked
+ list declaration</a>
+ </h6>
+<a name="toward_boost_stm.users_guide.tutorial.a_simple_transaction.insert_retry_transaction"></a><h6>
+<a name="id4804016"></a>
+ <a class="link" href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_simple_transaction.insert_retry_transaction">Insert
+ retry transaction</a>
+ </h6>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">insert</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">val</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">stm</span><span class="special">::</span><span class="identifier">transaction</span> <span class="identifier">_</span><span class="special">;</span> <span class="special">!</span><span class="identifier">_</span><span class="special">.</span><span class="identifier">committed</span><span class="special">()</span> <span class="special">&amp;&amp;</span> <span class="identifier">_</span><span class="special">.</span><span class="identifier">restart</span><span class="special">();</span> <span class="identifier">_</span><span class="special">.</span><span class="identifier">no_throw_end</span><span class="special">())</span>
+ <span class="keyword">try</span> <span class="special">{</span>
+ <span class="comment">// ... see below
+</span> <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">aborted_transaction_exception</span><span class="special">&amp;)</span> <span class="special">{}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The exposed insert code performs two key operations: (1) it retries the
+ transaction until it succeeds (commits) and (2) it catches aborted transaction
+ exceptions. The retry code is perhaps the largest visible section of code
+ overhead for the transactional linked list insert operation. While there
+ are other C++ mechanisms to retry transactions, like gotos or macro-based
+ approaches, we believe a simple loop is currently the best solution for
+ TM retry behavior in C++. Others before us have implemented differing solutions
+ that have smaller code footprints, but violate large-scale design concerns,
+ break compositionality potential and hide or impose large language penalties.
+ As such, we currently accept the loop overhead as a small inconvenience
+ and avoid breaking language semantics.
+ </p>
+<p>
+ The aborted_transaction_exception allows TBoost.STM to be exception neutral
+ while also gaining performance benefits of early notification of doomed
+ transactions. The above example demonstrates this behavior in practice
+ with its absorption of aborted transactions and only aborted transactions.
+ </p>
+<a name="toward_boost_stm.users_guide.tutorial.a_simple_transaction.insert_specific"></a><h6>
+<a name="id4804548"></a>
+ <a class="link" href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_simple_transaction.insert_specific">Insert
+ specific</a>
+ </h6>
+<pre class="programlisting"><span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">prev</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">head_</span><span class="special">);</span>
+<span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">curr</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">head_</span><span class="special">-&gt;</span><span class="identifier">next_</span><span class="special">);</span>
+<span class="keyword">while</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">value_</span> <span class="special">==</span> <span class="identifier">val</span><span class="special">)</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="keyword">else</span> <span class="keyword">if</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">value_</span> <span class="special">&gt;</span> <span class="identifier">val</span><span class="special">)</span> <span class="keyword">break</span><span class="special">;</span>
+ <span class="identifier">prev</span> <span class="special">=</span> <span class="identifier">curr</span><span class="special">;</span>
+ <span class="identifier">curr</span> <span class="special">=</span> <span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">next_</span><span class="special">;</span>
+<span class="special">}</span>
+<span class="keyword">if</span> <span class="special">(!</span><span class="identifier">curr</span> <span class="special">||</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">value_</span> <span class="special">&gt;</span> <span class="identifier">val</span><span class="special">))</span> <span class="special">{</span>
+ <span class="identifier">make_wr_ptr</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">prev</span><span class="special">)-&gt;</span><span class="identifier">next_</span> <span class="special">=</span>
+ <span class="identifier">BOOST_STM_NEW</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;(</span><span class="identifier">val</span><span class="special">,</span> <span class="identifier">curr</span><span class="special">));</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The above example illustrates the simplicity of TBoost.STM transactions
+ and their interfaces. The transactional implementation is nearly identical
+ to a non-transactional implementation with the exception of some annotations.
+ The templatized functions within the transaction class ensure type-safety
+ is maintained without any necessary type-casts. Due to exact type correctness,
+ as demonstrated in the calls to make_wr_ptr(), daisy-chained method invocation
+ can be performed allowing streamlined usage. These aspects help make TBoost.STM
+ transactions small and easy to understand.
+ </p>
+<p>
+ One minor, but vital, detail is in way new objects are created on a transactional
+ context. Rather than hide this difference, it is intentionally exposed
+ here to draw out the memory access differences required for writes to new
+ and existing memory. We explain this difference in detail later in this
+ section.
+ </p>
+<p>
+ In order to simplify the retry mechanism a macro is provided so the user
+ can just write
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">insert</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">val</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">atomic</span><span class="special">(</span><span class="identifier">_</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">prev</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">head_</span><span class="special">);</span>
+ <span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">curr</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">head_</span><span class="special">-&gt;</span><span class="identifier">next_</span><span class="special">);</span>
+ <span class="keyword">while</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">value_</span> <span class="special">==</span> <span class="identifier">val</span><span class="special">)</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="keyword">else</span> <span class="keyword">if</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">value_</span> <span class="special">&gt;</span> <span class="identifier">val</span><span class="special">)</span> <span class="keyword">break</span><span class="special">;</span>
+ <span class="identifier">prev</span> <span class="special">=</span> <span class="identifier">curr</span><span class="special">;</span>
+ <span class="identifier">curr</span> <span class="special">=</span> <span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">next_</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="keyword">if</span> <span class="special">(!</span><span class="identifier">curr</span> <span class="special">||</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">value_</span> <span class="special">&gt;</span> <span class="identifier">val</span><span class="special">))</span> <span class="special">{</span>
+ <span class="identifier">make_wr_ptr</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">prev</span><span class="special">)-&gt;</span><span class="identifier">next_</span> <span class="special">=</span>
+ <span class="identifier">BOOST_STM_NEW</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span><span class="identifier">transactional_object</span><span class="special">&lt;</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;(</span><span class="identifier">val</span><span class="special">,</span> <span class="identifier">curr</span><span class="special">));</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.users_guide.tutorial.a_composable_transaction"></a><a class="link" href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_composable_transaction" title="A Composable Transaction">A
+ Composable Transaction</a>
+</h4></div></div></div>
+<p>
+ The below example builds upon the previous example by adding a remove operation.
+ We combine the insert and remove operations and build a transactional move
+ operation that compose into a single transaction. Composition is a key
+ aspect for TM systems. TBoost.STM's ability to compose transactions from
+ pre-existing transactions is fundamental to its design.
+ </p>
+<p>
+ In the following example, the first section shows client code invoking
+ the move operation. Next, the internal remove operation is shown, demonstrating
+ its transactional independence. Last, the external move operation is explained,
+ combining the internal insert and remove linked list operations resulting
+ in a composed, single transaction.
+ </p>
+<p>
+ Client Invoked Inserts / Moves.
+ </p>
+<pre class="programlisting"><span class="identifier">tx_ptr</span><span class="special">&lt;</span><span class="identifier">linked_list</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">llist</span><span class="special">;</span>
+<span class="special">...</span>
+<span class="identifier">atomic</span><span class="special">(</span><span class="identifier">_</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="number">100</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">llist</span><span class="special">-&gt;</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">i</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">j</span> <span class="special">&lt;</span> <span class="number">100</span><span class="special">;</span> <span class="special">++</span><span class="identifier">j</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">llist</span><span class="special">-&gt;</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">j</span><span class="special">,</span> <span class="special">-</span><span class="identifier">j</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The client invoked inserts and moves are fairly straight forward. The insert
+ operations are performed first then the original items are moved to a new
+ location by inverting their value. Again, from a client programming perspective,
+ there is no hint that this code is transactional, which is our intended
+ goal.
+ </p>
+<p>
+ Remove
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">remove</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">use_atomic</span><span class="special">(</span><span class="identifier">_</span><span class="special">)</span> <span class="special">{</span>
+ <span class="comment">// find the node whose val matches the request
+</span> <span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">prev</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span><span class="identifier">head_</span><span class="special">);</span>
+ <span class="identifier">upgrd_ptr</span><span class="special">&lt;</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">curr</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span><span class="identifier">prev</span><span class="special">-&gt;</span><span class="identifier">next_</span><span class="special">);</span>
+ <span class="keyword">while</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">)</span> <span class="special">{</span>
+ <span class="comment">// if we find the node, disconnect it and end the search
+</span> <span class="keyword">if</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">value_</span> <span class="special">==</span> <span class="identifier">val</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">make_wr_ptr</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">prev</span><span class="special">)-&gt;</span><span class="identifier">next_</span><span class="special">=</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">next_</span><span class="special">;</span>
+ <span class="identifier">delete_ptr</span><span class="special">(</span><span class="identifier">_</span><span class="special">,</span><span class="identifier">curr</span><span class="special">);</span>
+ <span class="keyword">break</span><span class="special">;</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="keyword">if</span> <span class="special">(</span><span class="identifier">curr</span><span class="special">-&gt;</span><span class="identifier">value_</span> <span class="special">&gt;</span> <span class="identifier">val</span><span class="special">)</span> <span class="special">{</span>
+ <span class="comment">// this means the search failed
+</span> <span class="keyword">break</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="identifier">prev</span> <span class="special">=</span> <span class="identifier">curr</span><span class="special">;</span>
+ <span class="identifier">curr</span> <span class="special">=</span> <span class="identifier">prev</span><span class="special">-&gt;</span><span class="identifier">next_</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ As was the case with the insert(), the above remove() method is almost
+ identical to how a normal linked list remove operation would be implemented,
+ with the exception of the atomic guard and a few TBoost.STM API calls.
+ Again, this is ideal, as it leads to intuitive transactional programming,
+ requiring only a minor learning curve for the algorithms developer.
+ </p>
+<p>
+ Composed External Move
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">move</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">v1</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">v2</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">use_atomic</span> <span class="special">{</span>
+ <span class="identifier">remove</span><span class="special">(</span><span class="identifier">v1</span><span class="special">);</span>
+ <span class="identifier">insert</span><span class="special">(</span><span class="identifier">v2</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The move() implementation do not requires any overhead required in non-transactional
+ implementations, other than using the atomic guard. The remainder of the
+ code
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_stm.users_guide.tutorial.a_dynamically_prioritized__composed_transaction"></a><a class="link" href="tutorial.html#toward_boost_stm.users_guide.tutorial.a_dynamically_prioritized__composed_transaction" title="A Dynamically Prioritized, Composed Transaction">A
+ Dynamically Prioritized, Composed Transaction</a>
+</h4></div></div></div>
+<p>
+ The following subsection discusses how priority inversion is handled within
+ TBoost.STM using dynamic priority assignment. Two solutions are presented
+ for the different consistency models, one for validation and one for invalidation.
+ Following the two examples which detail how to override contention management
+ interfaces, a dynamically prioritized transaction is presented, demonstrating
+ how transactions interact with the prior implementations. Priority inversion
+ in transactional memory occurs when a lower priority transaction causes
+ a higher priority transaction to abort. With STM lock-based (and non-blocking)
+ systems, priority inversion does not happen on the same scale as that of
+ direct lock-based solutions. The different cases of priority inversion
+ between direct locking solutions and TM solutions are due to TM's natural
+ avoidance of critical sections. However, priority inversion in TM can easily
+ occur if, for example, a long running transaction is continually preempted
+ by shorter running transactions which always commit before the longer transaction.
+ </p>
+<p>
+ In order to prevent such priority inversion scenarios, two extensible contention
+ manager (CM) virtual methods are provided to allow client-side implementations
+ a way to handle different scenarios based on the consistency model currently
+ in use. The first interface, abort_before_commit(), allows a user-defined
+ contention manager mechanism to abort a transaction before it commits.
+ Although TBoost.STM does not yet implement validation, once it becomes
+ available, client-side validating algorithms which want to avoid priority
+ inversion will need to override abort_before_commit() to iterate over in-flight
+ transactions and abort the current in-process transaction if another in-flight
+ transaction exists of higher priority. All in-flight transactions can be
+ accessed by a call to in_flight_transactions() which returns the set of
+ active transactions. As such, one could build an overridden abort_before_commit()
+ which always caused lower priority committing transactions to abort in
+ the event a higher priority transaction is currently in-flight. One possible
+ implementation is shown below. For code simplicity, the following code
+ has removed some static class accessors and namespaces.
+ </p>
+<p>
+ Priority Inversion for Validating Consistency.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">priority_cm</span> <span class="special">:</span>
+<span class="keyword">public</span> <span class="identifier">core</span><span class="special">::</span><span class="identifier">base_contention_manager</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="comment">// method invoked prior tx commit
+</span> <span class="keyword">bool</span> <span class="identifier">abort_before_commit</span><span class="special">(</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">in_flight_transaction_container</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">in_flight_transactions</span><span class="special">().</span><span class="identifier">begin</span><span class="special">();</span>
+ <span class="keyword">for</span> <span class="special">(;</span> <span class="identifier">in_flight_transactions</span><span class="special">().</span><span class="identifier">end</span><span class="special">()</span> <span class="special">!=</span> <span class="identifier">i</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">priority</span><span class="special">()</span> <span class="special">&lt;</span> <span class="special">(*</span><span class="identifier">i</span><span class="special">)-&gt;</span><span class="identifier">priority</span><span class="special">()){</span>
+ <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+ <span class="keyword">return</span> <span class="keyword">false</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ While the above approach is necessary for a validating system, it is largely
+ a poor way to perform priority inversion checking. Firstly, it has the
+ side-effect of causing unnecessary aborts for transactions which do not
+ necessarily conflict, but simply have differing priority levels. Secondly,
+ it is slow in that all transactions must be walked through each time a
+ transaction commits. However, as an ad hoc solution for a validating system,
+ the above priority inversion mechanism may be as close to correct as is
+ possible. This solution is useful for validation, but should never be used
+ for invalidation. Instead a second and more natural approach for invalidating
+ systems to prevent priority inversion is to override the permission_to_abort()
+ interface. The permission_to_abort() interface can only be used when TBoost.STM
+ is performing invalidation.
+ </p>
+<p>
+ The permission_to_abort() interface is called from TBoost.STM's end_transaction()
+ method when a committing transaction has found a second transaction it
+ needs to abort for consistency. As such, the method takes two parameters,
+ an lhs (lefthand side), the committing transaction, and an rhs (right-hand
+ side), the transaction requested to be aborted. If permission is granted
+ to abort the second transaction, the method returns true and the second
+ transaction is aborted. If permission is not granted to abort the second
+ transaction, the method returns false and upon returning the committing
+ transaction aborts itself. All consistency checking for
+ </p>
+<p>
+ deferred updating is performed prior to any updating operation and thus
+ memory is still in a completely legal uncommitted state until all consistency
+ is performed. For direct updating aborts, the system simply follows its
+ normal semantics of aborting the transaction by restoring global memory
+ to its original state. Similar to the prior example, overriding the permission_to_abort()
+ method can be done in such a manner which prevents lower priority transaction
+ from aborting a higher priority transaction as shown below:
+ </p>
+<p>
+ Priority Inversion for Invalidating Consistency.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">priority_cm</span> <span class="special">:</span>
+<span class="keyword">public</span> <span class="identifier">core</span><span class="special">::</span><span class="identifier">base_contention_manager</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="comment">// method invoked before lhs transaction
+</span> <span class="comment">// aborts rhs transaction
+</span> <span class="keyword">bool</span> <span class="identifier">permission_to_abort</span><span class="special">(</span><span class="identifier">transaction</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">lhs</span><span class="special">,</span>
+ <span class="identifier">transaction</span> <span class="keyword">const</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="identifier">lhs</span><span class="special">.</span><span class="identifier">priority</span><span class="special">()</span> <span class="special">&gt;=</span> <span class="identifier">rhs</span><span class="special">.</span><span class="identifier">priority</span><span class="special">();</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ With priority inversion preventable for both validating and invalidating
+ consistency modes, transactions now need some mechanism to control their
+ priority. TBoost.STM allows for such control through the raise_priority()
+ interface. By iteratively calling raise_priority(), preempted transactions
+ can raise their priority at each preemption ensuring their eventual commit.
+ The raise_priority() interface is implemented using a size_t type. Additionally,
+ TBoost.STM supplies a set_priority() interface taking a size_t parameter
+ allowing client code to set the priority directly.
+ </p>
+<p>
+ In order for raise_priority() to function correctly, the affected transaction
+ must not be destroyed upon transactional abort. If the prioritized transaction
+ is destroyed at each transactional abort, raise_priority() will only raise
+ the transaction's priority by one each time. In order to demonstrate how
+ raise_priority() can be used in practice, we use a wrapper transaction
+ around the internal_insert()'s transaction. However, in this case the wrapper
+ transaction is not destroyed upon successive iterations. The restart_transaction()
+ interface must be called for transactions that are not destroyed after
+ being aborted. This necessary step clears the state from the previously
+ failed transactional run. As shown in the below code, the restart_transaction()
+ is only called when an aborted exception is caught. This is because end_transaction()
+ throws an exception when the transaction is aborted. Following this implementation
+ paradigm, handling aborted transactions is relatively straightforward as
+ all aborted transactions follow the same exception-based path.
+ </p>
+<p>
+ The below example combines all of these aspects together into a dynamically
+ prioritized composed transaction. The composition is slightly different
+ than what has been shown previously - instead of using composition for
+ wrapping two methods into a larger transaction, we use composition to override
+ the internal transaction's implementation to improve the richness of its
+ behavior, a relatively novel concept for composition.
+ </p>
+<p>
+ Dynamically Prioritized Composed Transaction.
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">insert</span><span class="special">(</span><span class="identifier">list_node</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span><span class="identifier">node</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">bool</span> <span class="identifier">success</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">;</span>
+ <span class="identifier">transaction_state</span> <span class="identifier">s</span> <span class="special">=</span> <span class="identifier">e_no_state</span><span class="special">;</span>
+ <span class="identifier">transaction</span> <span class="identifier">t</span><span class="special">;</span>
+ <span class="keyword">for</span> <span class="special">(;</span> <span class="identifier">s</span> <span class="special">!=</span> <span class="identifier">e_committed</span><span class="special">;</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">raise_priority</span><span class="special">())</span> <span class="special">{</span>
+ <span class="keyword">try</span> <span class="special">{</span>
+ <span class="identifier">internal_insert</span><span class="special">(</span><span class="identifier">node</span><span class="special">,</span> <span class="identifier">success</span><span class="special">);</span>
+ <span class="identifier">s</span> <span class="special">=</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">end_transaction</span><span class="special">();</span>
+ <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">aborted_transaction_exception</span><span class="special">&amp;)</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">.</span><span class="identifier">restart_transaction</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="keyword">if</span> <span class="special">(!</span><span class="identifier">success</span><span class="special">)</span> <span class="keyword">return</span> <span class="keyword">false</span><span class="special">;</span> <span class="comment">// on list
+</span> <span class="special">}</span>
+ <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The above example demonstrates a number of important concepts with TBoost.STM's
+ extensible contention manager and its implementation of composition. First,
+ it shows how to avoid priority inversion, using dynamically prioritize
+ transactions, in conjunction with a prioritized overridden contention manager
+ for both validation and invalidation consistency schemes. Second, it demonstrates
+ how transactions which are aborted but not destroyed can be restarted with
+ the aborted transaction catch clause. Third, the example explains how ordinary
+ transactions can be enriched by layering composed transactions on top of
+ them without changing the underlying original code. Lastly, it reveals
+ some of TBoost.STM's internal priority processing which requires a additional
+ amount of explanation, as follows.
+ </p>
+<p>
+ TBoost.STM's Internal Write-Write Abort Process.
+ </p>
+<p>
+ As the above priority assigned transaction demonstrates, the outer transaction
+ has increasing priority while the inner transaction, the one within internal_insert(),
+ does not. Yet, the inner transaction is not aborted due to the outer transaction's
+ priority. This is handled internally via TBoost.STM's abort process by
+ two fundamental ideas.
+ </p>
+<div class="orderedlist"><ol type="1">
+<li>
+ As previously explained, all transactions of the same thread share transactional
+ memory, this allows the outer transaction to be seen as using the same
+ memory as the inner transaction. Thus, when the inner transaction is
+ flagged to be aborted, the outer transaction must also be flagged to
+ be aborted as well, since it would have the same memory conflicts. However,
+ when checking the outer transaction's priority, the contention manager's
+ priority method would see the outer transaction as having higher priority
+ than the committing transaction if it had already been aborted once and
+ the committing transaction had not. The priority analysis of the outer
+ transaction compared to the committing transaction would thereby force
+ the committing transaction to abort instead of the outer transaction.
+ </li>
+<li>
+ TBoost.STM's abort mechanism does not abort any transactions until it
+ has walked all transactions, passing all the permission_to_abort() checks.
+ Therefore, even if the inner transaction is flagged to be aborted, since
+ all transactions must be successfully walked in order to abort any transaction,
+ the outer transaction's priority will cause the committing transaction
+ to abort, thereby saving the inner transaction from being affected. An
+ example of this, taken directly from TBoost.STM's implementation, is
+ shown below (some code has been removed or shorted to simplify the example):
+ </li>
+</ol></div>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">abort_conflicting_writes_on_write_set</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">trans_list</span> <span class="identifier">aborted</span><span class="special">;</span>
+ <span class="comment">// iterate through all tx's written memory
+</span> <span class="keyword">for</span> <span class="special">(</span><span class="identifier">write_set</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">writes</span><span class="special">().</span><span class="identifier">begin</span><span class="special">();</span> <span class="identifier">writes</span><span class="special">().</span><span class="identifier">end</span><span class="special">()</span> <span class="special">!=</span> <span class="identifier">i</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span>
+ <span class="comment">// iterate through inflight transactions
+</span> <span class="keyword">for</span> <span class="special">(</span><span class="identifier">trans</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">j</span> <span class="special">=</span> <span class="identifier">inflight_</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> <span class="identifier">inflight_</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span> <span class="special">!=</span> <span class="identifier">j</span><span class="special">;</span> <span class="special">++</span><span class="identifier">j</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">transaction</span> <span class="special">*</span><span class="identifier">t</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">transaction</span><span class="special">*)*</span><span class="identifier">j</span><span class="special">;</span>
+ <span class="comment">// if writing to this write_set, store it
+</span> <span class="keyword">if</span> <span class="special">(</span><span class="identifier">t</span><span class="special">-&gt;</span><span class="identifier">writes</span><span class="special">().</span><span class="identifier">end</span><span class="special">()</span> <span class="special">!=</span> <span class="identifier">t</span><span class="special">-&gt;</span><span class="identifier">writes</span><span class="special">().</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">i</span><span class="special">-&gt;</span><span class="identifier">first</span><span class="special">))</span> <span class="special">{</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">cm_</span><span class="special">-&gt;</span><span class="identifier">permission_to_abort</span><span class="special">(*</span><span class="keyword">this</span><span class="special">,</span> <span class="special">*</span><span class="identifier">t</span><span class="special">))</span>
+ <span class="identifier">aborted</span><span class="special">.</span><span class="identifier">push_front</span><span class="special">(</span><span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">else</span>
+ <span class="keyword">throw</span> <span class="identifier">aborted_transaction_exception</span><span class="special">(</span><span class="string">""</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+ <span class="comment">// ok, forced to aborts are allowed, do them
+</span> <span class="keyword">for</span> <span class="special">(</span><span class="identifier">trans_list</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">k</span> <span class="special">=</span> <span class="identifier">aborted</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> <span class="identifier">aborted</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span> <span class="special">!=</span> <span class="identifier">k</span><span class="special">;</span> <span class="special">++</span><span class="identifier">k</span><span class="special">)</span> <span class="special">{</span>
+ <span class="special">(*</span><span class="identifier">k</span><span class="special">)-&gt;</span><span class="identifier">forced_to_abort</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Priority Inversion Allowed.
+ </p>
+<p>
+ From the above code examples, one may question why the default behavior
+ implemented within TBoost.STM does not automatically integrate priority
+ into transactions, as it could be integrated within restart_transaction().
+ First, each problem is different and integrating priority only into restart_transaction()
+ would not cover all cases (e.g., when the outer transaction was terminated).
+ Second, building an automatic priority inversion handling scheme would
+ eliminate some of the natural optimizations granted from different updating
+ policies. For example, deferred updating allows multiple writers of the
+ same memory to execute simultaneously. This behavior enables deferred updating
+ the ability to process the fastest completing transactions first. If a
+ priority system was integrated directly into TBoost.STM, this optimization
+ would be lost. In addition, direct updating optimizes writes by writing
+ directly to global memory. As such, direct updating suffers greater penalties
+ for aborted transactions due to required restoration of global memory.
+ In this case, more transactional aborts would occur if TBoost.STM built-in
+ a default priority inversion handler. Considering these factors, as well
+ as many others, TBoost.STM does not build transactional priority into its
+ system. Instead, we leave this implementation up to client-side implementors,
+ as they will have a better understanding of their problem domain and be
+ able to more correctly implement the right contention manager for their
+ specific needs.
+ </p>
+<p>
+ The Future of Parallel Programming.
+ </p>
+<p>
+ An important distinction regarding priority within transactions versus
+ priority within more classical synchronization mechanisms, like locks,
+ is that same functional units can be executed simultaneously by different
+ threads yielding different priorities. For example, two threads can be
+ executing the above insert transaction, one thread which has just begun
+ its first run will have a priority of 0, while a second transaction which
+ has attempted to run the insert operation 99 times previously, would have
+ a priority of 99. The important distinction here is that classical critical
+ section synchronization mechanisms can have only a single priority per
+ functional unit (e.g., insert, remove, lookup operation) due to the innate
+ limitations of single thread critical section execution. With transactions,
+ this limitation is removed and new concepts of priority begin to emerge.
+ Priority inversion can then extend beyond its traditional meaning and extend
+ into a new category which incorporates differing priority within the same
+ functional unit. These new concepts may reshape the way classical parallel
+ problems are thought of in the future, especially in relation to transactional
+ memory.
+ </p>
+</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 © 2009 Justin E. Gottchlich<br>Copyright © 2009 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>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="getting_started.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../users_guide.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="ext_references.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk