Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r56765 - in sandbox/synchro: . doc doc/html doc/html/images doc/html/images/callouts libs/synchro/doc/html libs/synchro/doc/html/boost_synchro libs/synchro/doc/html/boost_synchro/appendices libs/synchro/doc/html/boost_synchro/overview libs/synchro/doc/html/boost_synchro/reference libs/synchro/doc/html/boost_synchro/users_guide libs/synchro/test
From: vicente.botet_at_[hidden]
Date: 2009-10-12 17:49:39


Author: viboes
Date: 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
New Revision: 56765
URL: http://svn.boost.org/trac/boost/changeset/56765

Log:
TBoost.Synchro:
* Added doc

Added:
   sandbox/synchro/boost.png (contents, props changed)
   sandbox/synchro/doc/
   sandbox/synchro/doc/html/
   sandbox/synchro/doc/html/boostbook.css (contents, props changed)
   sandbox/synchro/doc/html/images/
   sandbox/synchro/doc/html/images/alert.png (contents, props changed)
   sandbox/synchro/doc/html/images/blank.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/
   sandbox/synchro/doc/html/images/callouts/1.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/10.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/11.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/12.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/13.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/14.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/15.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/2.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/3.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/4.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/5.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/6.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/7.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/8.png (contents, props changed)
   sandbox/synchro/doc/html/images/callouts/9.png (contents, props changed)
   sandbox/synchro/doc/html/images/caution.png (contents, props changed)
   sandbox/synchro/doc/html/images/draft.png (contents, props changed)
   sandbox/synchro/doc/html/images/home.png (contents, props changed)
   sandbox/synchro/doc/html/images/important.png (contents, props changed)
   sandbox/synchro/doc/html/images/next.png (contents, props changed)
   sandbox/synchro/doc/html/images/next_disabled.png (contents, props changed)
   sandbox/synchro/doc/html/images/note.png (contents, props changed)
   sandbox/synchro/doc/html/images/prev.png (contents, props changed)
   sandbox/synchro/doc/html/images/prev_disabled.png (contents, props changed)
   sandbox/synchro/doc/html/images/smiley.png (contents, props changed)
   sandbox/synchro/doc/html/images/tip.png (contents, props changed)
   sandbox/synchro/doc/html/images/toc-blank.png (contents, props changed)
   sandbox/synchro/doc/html/images/toc-minus.png (contents, props changed)
   sandbox/synchro/doc/html/images/toc-plus.png (contents, props changed)
   sandbox/synchro/doc/html/images/up.png (contents, props changed)
   sandbox/synchro/doc/html/images/up_disabled.png (contents, props changed)
   sandbox/synchro/doc/html/images/warning.png (contents, props changed)
   sandbox/synchro/doc/html/reference.css (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/acknowledgements.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/appendix_e__tests.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/appendix_f__tickets.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/history.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/implementation.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/rationale.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/todo.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/examples.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/overview/
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/overview.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/overview/intro.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/condition_lockables.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/generic_free_functions_on_lockable.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/generic_free_functions_on_multiple_lockables.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/high_level.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/lockables.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/lockers.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/multi_process.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/multi_threaded.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/other.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/polymorphic_locks.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/single_threaded.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/users_guide/
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/users_guide.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/users_guide/ext_references.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/users_guide/getting_started.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/users_guide/glosary.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/boost_synchro/users_guide/tutorial.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/index.html (contents, props changed)
   sandbox/synchro/libs/synchro/doc/html/standalone_HTML.manifest (contents, props changed)
Text files modified:
   sandbox/synchro/libs/synchro/test/Jamfile.v2 | 6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)

Added: sandbox/synchro/boost.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/boostbook.css
==============================================================================
--- (empty file)
+++ sandbox/synchro/doc/html/boostbook.css 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,538 @@
+/*=============================================================================
+ Copyright (c) 2004 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is subject to 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)
+=============================================================================*/
+
+/*=============================================================================
+ Body defaults
+=============================================================================*/
+
+ body
+ {
+ margin: 1em;
+ font-family: sans-serif;
+ }
+
+/*=============================================================================
+ Paragraphs
+=============================================================================*/
+
+ p
+ {
+ text-align: left;
+ font-size: 10pt;
+ line-height: 1.15;
+ }
+
+/*=============================================================================
+ Program listings
+=============================================================================*/
+
+ /* Code on paragraphs */
+ p tt.computeroutput
+ {
+ font-size: 10pt;
+ }
+
+ pre.synopsis
+ {
+ font-size: 10pt;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ .programlisting,
+ .screen
+ {
+ font-size: 10pt;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+/*=============================================================================
+ Headings
+=============================================================================*/
+
+ h1, h2, h3, h4, h5, h6
+ {
+ text-align: left;
+ margin: 1em 0em 0.5em 0em;
+ font-weight: bold;
+ }
+
+ h1 { font: 140% }
+ h2 { font: bold 140% }
+ h3 { font: bold 130% }
+ h4 { font: bold 120% }
+ h5 { font: italic 110% }
+ h6 { font: italic 100% }
+
+ /* Top page titles */
+ title,
+ h1.title,
+ h2.title
+ h3.title,
+ h4.title,
+ h5.title,
+ h6.title,
+ .refentrytitle
+ {
+ font-weight: bold;
+ margin-bottom: 1pc;
+ }
+
+ h1.title { font-size: 140% }
+ h2.title { font-size: 140% }
+ h3.title { font-size: 130% }
+ h4.title { font-size: 120% }
+ h5.title { font-size: 110% }
+ h6.title { font-size: 100% }
+
+ .section h1
+ {
+ margin: 0em 0em 0.5em 0em;
+ font-size: 140%;
+ }
+
+ .section h2 { font-size: 140% }
+ .section h3 { font-size: 130% }
+ .section h4 { font-size: 120% }
+ .section h5 { font-size: 110% }
+ .section h6 { font-size: 100% }
+
+ /* Code on titles */
+ h1 tt.computeroutput { font-size: 140% }
+ h2 tt.computeroutput { font-size: 140% }
+ h3 tt.computeroutput { font-size: 130% }
+ h4 tt.computeroutput { font-size: 120% }
+ h5 tt.computeroutput { font-size: 110% }
+ h6 tt.computeroutput { font-size: 100% }
+
+/*=============================================================================
+ Author
+=============================================================================*/
+
+ h3.author
+ {
+ font-size: 100%
+ }
+
+/*=============================================================================
+ Lists
+=============================================================================*/
+
+ li
+ {
+ font-size: 10pt;
+ line-height: 1.3;
+ }
+
+ /* Unordered lists */
+ ul
+ {
+ text-align: left;
+ }
+
+ /* Ordered lists */
+ ol
+ {
+ text-align: left;
+ }
+
+/*=============================================================================
+ Links
+=============================================================================*/
+
+ a
+ {
+ text-decoration: none; /* no underline */
+ }
+
+ a:hover
+ {
+ text-decoration: underline;
+ }
+
+/*=============================================================================
+ Spirit style navigation
+=============================================================================*/
+
+ .spirit-nav
+ {
+ text-align: right;
+ }
+
+ .spirit-nav a
+ {
+ color: white;
+ padding-left: 0.5em;
+ }
+
+ .spirit-nav img
+ {
+ border-width: 0px;
+ }
+
+/*=============================================================================
+ Table of contents
+=============================================================================*/
+
+ .toc
+ {
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.1pc 1pc 0.1pc 1pc;
+ font-size: 10pt;
+ line-height: 1.15;
+ }
+
+ .toc-main
+ {
+ width: 600;
+ text-align: center;
+ margin: 1pc 1pc 1pc 10%;
+ padding: 2pc 1pc 3pc 1pc;
+ line-height: 0.1;
+ }
+
+ .boost-toc
+ {
+ float: right;
+ padding: 0.5pc;
+ }
+
+/*=============================================================================
+ Tables
+=============================================================================*/
+
+ .table-title,
+ div.table p.title
+ {
+ margin-left: 4%;
+ padding-right: 0.5em;
+ padding-left: 0.5em;
+ }
+
+ .informaltable table,
+ .table table
+ {
+ width: 92%;
+ margin-left: 4%;
+ margin-right: 4%;
+ }
+
+ div.informaltable table,
+ div.table table
+ {
+ padding: 4px;
+ }
+
+ /* Table Cells */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ padding: 0.5em;
+ text-align: left;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ padding: 0.5em 0.5em 0.5em 0.5em;
+ border: 1pt solid white;
+ font-size: 120%;
+ }
+
+/*=============================================================================
+ Blurbs
+=============================================================================*/
+
+ div.note,
+ div.tip,
+ div.important,
+ div.caution,
+ div.warning,
+ p.blurb
+ {
+ font-size: 10pt;
+ line-height: 1.2;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ p.blurb img
+ {
+ padding: 1pt;
+ }
+
+/*=============================================================================
+ Variable Lists
+=============================================================================*/
+
+ span.term
+ {
+ font-weight: bold;
+ font-size: 10pt;
+ }
+
+ div.variablelist table tbody tr td
+ {
+ text-align: left;
+ vertical-align: top;
+ padding: 0em 2em 0em 0em;
+ font-size: 10pt;
+ }
+
+ div.variablelist table tbody tr td p
+ {
+ margin: 0em 0em 0.5em 0em;
+ }
+
+ /* Make the terms in definition lists bold */
+ div.variablelist dl dt
+ {
+ font-weight: bold;
+ font-size: 10pt;
+ }
+
+ div.variablelist dl dd
+ {
+ margin: 1em 0em 1em 2em;
+ font-size: 10pt;
+ }
+
+/*=============================================================================
+ Misc
+=============================================================================*/
+
+ /* Title of books and articles in bibliographies */
+ span.title
+ {
+ font-style: italic;
+ }
+
+ span.underline
+ {
+ text-decoration: underline;
+ }
+
+ span.strikethrough
+ {
+ text-decoration: line-through;
+ }
+
+ /* Copyright, Legal Notice */
+ div div.legalnotice p
+ {
+ font-size: 8pt;
+ text-align: left
+ }
+
+/*=============================================================================
+ Colors
+=============================================================================*/
+
+ @media screen
+ {
+ /* Links */
+ a
+ {
+ color: #0C7445;
+ }
+
+ a:visited
+ {
+ color: #663974;
+ }
+
+ h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
+ h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
+ h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
+ {
+ text-decoration: none; /* no underline */
+ color: #000000;
+ }
+
+ /* Syntax Highlighting */
+ .keyword { color: #0000AA; }
+ .identifier { color: #000000; }
+ .special { color: #707070; }
+ .preprocessor { color: #402080; }
+ .char { color: teal; }
+ .comment { color: #800000; }
+ .string { color: teal; }
+ .number { color: teal; }
+ .white_bkd { background-color: #E8FBE9; }
+ .dk_grey_bkd { background-color: #A0DAAC; }
+
+ /* Copyright, Legal Notice */
+ .copyright
+ {
+ color: #666666;
+ font-size: small;
+ }
+
+ div div.legalnotice p
+ {
+ color: #666666;
+ }
+
+ /* Program listing */
+ pre.synopsis
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ .programlisting,
+ .screen
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ /* Blurbs */
+ div.note,
+ div.tip,
+ div.important,
+ div.caution,
+ div.warning,
+ p.blurb
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ /* Table of contents */
+ .toc
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ /* Table of contents */
+ .toc-main
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+
+ /* Tables */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ border: 1px solid #DCDCDC;
+ background-color: #FAFFFB;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ background-color: #E3F9E4;
+ border: 1px solid #DCDCDC;
+ }
+
+ /* Misc */
+ span.highlight
+ {
+ color: #00A000;
+ }
+ }
+
+ @media print
+ {
+ /* Links */
+ a
+ {
+ color: black;
+ }
+
+ a:visited
+ {
+ color: black;
+ }
+
+ .spirit-nav
+ {
+ display: none;
+ }
+
+ /* Program listing */
+ pre.synopsis
+ {
+ border: 1px solid gray;
+ background-color: #FAFFFB;
+ }
+
+ .programlisting,
+ .screen
+ {
+ border: 1px solid gray;
+ background-color: #FAFFFB;
+ }
+
+ /* Table of contents */
+ .toc
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ /* Table of contents */
+ .toc-main
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ background-color: #FAFFFB;
+ }
+
+ .informaltable table,
+ .table table
+ {
+ border: 1px solid #DCDCDC;
+ border-bottom: 3px solid #9D9D9D;
+ border-right: 3px solid #9D9D9D;
+ border-collapse: collapse;
+ background-color: #FAFFFB;
+ }
+
+ /* Tables */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ border: 1px solid #DCDCDC;
+ background-color: #FAFFFB;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ border: 1px solid #DCDCDC;
+ background-color: #FAFFFB;
+ }
+
+ /* Misc */
+ span.highlight
+ {
+ font-weight: bold;
+ }
+ }

Added: sandbox/synchro/doc/html/images/alert.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/blank.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/1.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/10.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/11.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/12.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/13.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/14.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/15.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/2.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/3.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/4.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/5.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/6.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/7.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/8.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/callouts/9.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/caution.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/draft.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/home.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/important.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/next.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/next_disabled.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/note.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/prev.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/prev_disabled.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/smiley.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/tip.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/toc-blank.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/toc-minus.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/toc-plus.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/up.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/up_disabled.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/images/warning.png
==============================================================================
Binary file. No diff available.

Added: sandbox/synchro/doc/html/reference.css
==============================================================================
--- (empty file)
+++ sandbox/synchro/doc/html/reference.css 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,13 @@
+/*=============================================================================
+ Copyright (c) 2004 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is subject to 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)
+=============================================================================*/
+PRE.synopsis {
+ background-color: #e0ffff;
+ border: thin solid blue;
+ padding: 1em
+}

Added: sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,76 @@
+<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.69.1">
+<link rel="start" href="../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="prev" href="examples.html" title="Examples">
+<link rel="next" href="appendices/history.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="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></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/history.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="boost_synchro.appendices"></a>Appendices
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Appendix A: History</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="appendices/history.html#boost_synchro.appendices.history.__version_0_3_3__may_24__2009____extraction_of_boost_rendez_vous_"><span class="bold"><strong>Version 0.3.3, May 24, 2009</strong></span> <span class="emphasis"><em>Extraction of
+ Boost.Rendez-Vous</em></span></a></span></dt>
+<dt><span class="section"><a href="appendices/history.html#boost_synchro.appendices.history.__version_0_3_2__may_08__2009____adaptation_boost_1_39___extraction_of_boost_conversion_"><span class="bold"><strong>Version 0.3.2, May 08, 2009</strong></span> <span class="emphasis"><em>Adaptation Boost
+ 1.39 + Extraction of Boost.Conversion</em></span></a></span></dt>
+<dt><span class="section"><a href="appendices/history.html#boost_synchro.appendices.history.__version_0_3_1__mars_29__2009____language_like_synchronized_block_macros_"><span class="bold"><strong>Version 0.3.1, Mars 29, 2009</strong></span> <span class="emphasis"><em>Language-like
+ Synchronized Block Macros</em></span></a></span></dt>
+<dt><span class="section"><a href="appendices/history.html#boost_synchro.appendices.history.__version_0_3_0__mars_19__2009____generic_free_operations_on_multiple_lockables___usage_of_boost_chrono_"><span class="bold"><strong>Version 0.3.0, Mars 19, 2009</strong></span> <span class="emphasis"><em>Generic free
+ operations on multiple lockables + Usage of Boost.Chrono</em></span></a></span></dt>
+<dt><span class="section"><a href="appendices/history.html#boost_synchro.appendices.history.__version_0_2_0__mars_1__2009____binary_semaphore___array_locker_"><span class="bold"><strong>Version 0.2.0, Mars 1, 2009</strong></span> <span class="emphasis"><em>binary_semaphore
+ + array_locker</em></span></a></span></dt>
+<dt><span class="section"><a href="appendices/history.html#boost_synchro.appendices.history.__version_0_1_0__febraury_16__2009____announcement_of_synchro_"><span class="bold"><strong>Version 0.1.0, Febraury 16, 2009</strong></span> <span class="emphasis"><em>Announcement
+ of Synchro</em></span></a></span></dt>
+</dl></dd>
+<dt><span class="section"> Appendix B: Rationale</span></dt>
+<dt><span class="section"><a href="appendices/implementation.html"> Appendix C:
+ Implementation Notes</a></span></dt>
+<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">Lockables</span></dt>
+<dt><span class="section">Lockers</span></dt>
+<dt><span class="section">Others</span></dt>
+<dt><span class="section">Examples</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"> Appendix E: Future plans</span></dt>
+</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 © 2008 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/history.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/acknowledgements.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/acknowledgements.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,51 @@
+<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.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="boost_synchro.appendices.acknowledgements"></a><a 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 © 2008 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/synchro/libs/synchro/doc/html/boost_synchro/appendices/appendix_e__tests.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/appendix_e__tests.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,550 @@
+<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.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="boost_synchro.appendices.appendix_e__tests"></a><a 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">Lockables</span></dt>
+<dt><span class="section">Lockers</span></dt>
+<dt><span class="section">Others</span></dt>
+<dt><span class="section">Examples</span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.appendix_e__tests.lockables"></a>Lockables
+</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>
+ lockable_traits
+ </p>
+ </td>
+<td>
+ <p>
+ compile
+ </p>
+ </td>
+<td>
+ <p>
+ static assertion on lockables traits
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ lockable_concepts
+ </p>
+ </td>
+<td>
+ <p>
+ compile
+ </p>
+ </td>
+<td>
+ <p>
+ static assertion on lockables concepts
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.appendix_e__tests.lockers"></a>Lockers
+</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>
+ locker_concepts
+ </p>
+ </td>
+<td>
+ <p>
+ compile
+ </p>
+ </td>
+<td>
+ <p>
+ static assertion on lockers concepts
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ nested_reverse_locker
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ nested_reverse_locker tests
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.appendix_e__tests.others"></a>Others
+</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>
+ sync_buffer_family
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ synchronous buffer with synchronization family tests
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ sync_buffer_monitor
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ monitor synchronous buffer tests
+ </p>
+ </td>
+<td>
+ <p>
+ Fail
+ </p>
+ </td>
+<td>
+ <p>
+ v0.2#1
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.appendix_e__tests.examples"></a>Examples
+</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>
+ BankAccount
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ tests
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ IL_BancAccount
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ tests
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ IL_Lockable_BancAccount
+ </p>
+ </td>
+<td>
+ <p>
+ run-fail
+ </p>
+ </td>
+<td>
+ <p>
+ tests
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ IL_Rec_Lockable_BancAccount
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ tests
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ IEL_Rec_Lockable_BancAccount
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ tests
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ EL_BancAccount
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ tests
+ </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 © 2008 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/synchro/libs/synchro/doc/html/boost_synchro/appendices/appendix_f__tickets.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/appendix_f__tickets.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,171 @@
+<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.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="boost_synchro.appendices.appendix_f__tickets"></a><a 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.1#1
+ </p>
+ </td>
+<td>
+ <p>
+ array_locker
+ </p>
+ </td>
+<td>
+ <p>
+ See section
+ </p>
+ </td>
+<td>
+ <p>
+ Open
+ </p>
+ </td>
+<td>
+ <p>
+ See array_locker_tests
+ </p>
+ </td>
+<td>
+ <p>
+ v0.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bug
+ </p>
+ </td>
+<td>
+ <p>
+ v0.2#1
+ </p>
+ </td>
+<td>
+ <p>
+ sync_buffer_monitor_test fails
+ </p>
+ </td>
+<td>
+ <p>
+ ---
+ </p>
+ </td>
+<td>
+ <p>
+ Open
+ </p>
+ </td>
+<td>
+ <p>
+ sync_buffer_monitor_test
+ </p>
+ </td>
+<td>
+ <p>
+ v0.2
+ </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 © 2008 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/synchro/libs/synchro/doc/html/boost_synchro/appendices/history.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/history.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,202 @@
+<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.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="boost_synchro.appendices.history"></a> Appendix A: History
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="history.html#boost_synchro.appendices.history.__version_0_3_3__may_24__2009____extraction_of_boost_rendez_vous_"><span class="bold"><strong>Version 0.3.3, May 24, 2009</strong></span> <span class="emphasis"><em>Extraction of
+ Boost.Rendez-Vous</em></span></a></span></dt>
+<dt><span class="section"><a href="history.html#boost_synchro.appendices.history.__version_0_3_2__may_08__2009____adaptation_boost_1_39___extraction_of_boost_conversion_"><span class="bold"><strong>Version 0.3.2, May 08, 2009</strong></span> <span class="emphasis"><em>Adaptation Boost
+ 1.39 + Extraction of Boost.Conversion</em></span></a></span></dt>
+<dt><span class="section"><a href="history.html#boost_synchro.appendices.history.__version_0_3_1__mars_29__2009____language_like_synchronized_block_macros_"><span class="bold"><strong>Version 0.3.1, Mars 29, 2009</strong></span> <span class="emphasis"><em>Language-like
+ Synchronized Block Macros</em></span></a></span></dt>
+<dt><span class="section"><a href="history.html#boost_synchro.appendices.history.__version_0_3_0__mars_19__2009____generic_free_operations_on_multiple_lockables___usage_of_boost_chrono_"><span class="bold"><strong>Version 0.3.0, Mars 19, 2009</strong></span> <span class="emphasis"><em>Generic free
+ operations on multiple lockables + Usage of Boost.Chrono</em></span></a></span></dt>
+<dt><span class="section"><a href="history.html#boost_synchro.appendices.history.__version_0_2_0__mars_1__2009____binary_semaphore___array_locker_"><span class="bold"><strong>Version 0.2.0, Mars 1, 2009</strong></span> <span class="emphasis"><em>binary_semaphore
+ + array_locker</em></span></a></span></dt>
+<dt><span class="section"><a href="history.html#boost_synchro.appendices.history.__version_0_1_0__febraury_16__2009____announcement_of_synchro_"><span class="bold"><strong>Version 0.1.0, Febraury 16, 2009</strong></span> <span class="emphasis"><em>Announcement
+ of Synchro</em></span></a></span></dt>
+</dl></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.history.__version_0_3_3__may_24__2009____extraction_of_boost_rendez_vous_"></a><a href="history.html#boost_synchro.appendices.history.__version_0_3_3__may_24__2009____extraction_of_boost_rendez_vous_" title="Version 0.3.3, May 24, 2009 Extraction of
+ Boost.Rendez-Vous"><span class="bold"><strong>Version 0.3.3, May 24, 2009</strong></span> <span class="emphasis"><em>Extraction of
+ Boost.Rendez-Vous</em></span></a>
+</h4></div></div></div></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.history.__version_0_3_2__may_08__2009____adaptation_boost_1_39___extraction_of_boost_conversion_"></a><a href="history.html#boost_synchro.appendices.history.__version_0_3_2__may_08__2009____adaptation_boost_1_39___extraction_of_boost_conversion_" title="Version 0.3.2, May 08, 2009 Adaptation Boost
+ 1.39 + Extraction of Boost.Conversion"><span class="bold"><strong>Version 0.3.2, May 08, 2009</strong></span> <span class="emphasis"><em>Adaptation Boost
+ 1.39 + Extraction of Boost.Conversion</em></span></a>
+</h4></div></div></div></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.history.__version_0_3_1__mars_29__2009____language_like_synchronized_block_macros_"></a><a href="history.html#boost_synchro.appendices.history.__version_0_3_1__mars_29__2009____language_like_synchronized_block_macros_" title="Version 0.3.1, Mars 29, 2009 Language-like
+ Synchronized Block Macros"><span class="bold"><strong>Version 0.3.1, Mars 29, 2009</strong></span> <span class="emphasis"><em>Language-like
+ Synchronized Block Macros</em></span></a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>New Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Language-like Synchronized Block Macros.
+ </li></ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.history.__version_0_3_0__mars_19__2009____generic_free_operations_on_multiple_lockables___usage_of_boost_chrono_"></a><a href="history.html#boost_synchro.appendices.history.__version_0_3_0__mars_19__2009____generic_free_operations_on_multiple_lockables___usage_of_boost_chrono_" title="Version 0.3.0, Mars 19, 2009 Generic free
+ operations on multiple lockables + Usage of Boost.Chrono"><span class="bold"><strong>Version 0.3.0, Mars 19, 2009</strong></span> <span class="emphasis"><em>Generic free
+ operations on multiple lockables + Usage of Boost.Chrono</em></span></a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>New Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Generic free functions on lockables: <code class="computeroutput"><span class="identifier">lock</span></code>,
+ <code class="computeroutput"><span class="identifier">try_lock</span></code>
+</li>
+<li>
+ Complete the generic free functions on multiple lockables in Boost.Thread
+ <code class="computeroutput"><span class="identifier">lock</span></code>, <code class="computeroutput"><span class="identifier">try_lock</span></code>
+ with:
+ <div class="itemizedlist"><ul type="circle"><li>
+<code class="computeroutput"><span class="identifier">lock_until</span></code>, <code class="computeroutput"><span class="identifier">lock_for</span></code>, <code class="computeroutput"><span class="identifier">try_lock_until</span></code>,
+ <code class="computeroutput"><span class="identifier">try_lock_for</span></code>, <code class="computeroutput"><span class="identifier">unlock</span></code>
+</li></ul></div>
+</li>
+</ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.history.__version_0_2_0__mars_1__2009____binary_semaphore___array_locker_"></a><a href="history.html#boost_synchro.appendices.history.__version_0_2_0__mars_1__2009____binary_semaphore___array_locker_" title="Version 0.2.0, Mars 1, 2009 binary_semaphore
+ + array_locker"><span class="bold"><strong>Version 0.2.0, Mars 1, 2009</strong></span> <span class="emphasis"><em>binary_semaphore
+ + array_locker</em></span></a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>New Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">binary_semaphore</span></code> emulation
+ with mutex
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">array_locker</span></code> locker containers.
+ </li>
+</ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.appendices.history.__version_0_1_0__febraury_16__2009____announcement_of_synchro_"></a><a href="history.html#boost_synchro.appendices.history.__version_0_1_0__febraury_16__2009____announcement_of_synchro_" title="Version 0.1.0, Febraury 16, 2009 Announcement
+ of Synchro"><span class="bold"><strong>Version 0.1.0, Febraury 16, 2009</strong></span> <span class="emphasis"><em>Announcement
+ of Synchro</em></span></a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ A uniform usage of Boost.Thread and Boost.Interprocess synchronization
+ mechanisms based on lockables(mutexes) concepts and locker(guards) concepts.
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ lockables traits and lock generators,
+ </li>
+<li>
+ lock adapters of the Boost.Thread and Boost.Interprocess lockable
+ models,
+ </li>
+<li>
+ locker adapters of the Boost.Thread and Boost.Interprocess lockers
+ models,
+ </li>
+<li>
+ complete them with the corresponding models for single-threaded programms:
+ <code class="computeroutput"><span class="identifier">null_mutex</span></code> and <code class="computeroutput"><span class="identifier">null_condition</span></code> classes,
+ </li>
+<li>
+ locking families,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">semaphore</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">condition_lockable</span></code>
+ lock put toghether a lock and its associated conditions.
+ </li>
+</ul></div>
+</li>
+<li>
+ Exception based timed lockables and lockers,
+ </li>
+<li>
+ A rich palete of lockers as
+ <div class="itemizedlist"><ul type="circle">
+<li>
+<code class="computeroutput"><span class="identifier">strict_locker</span></code>, <code class="computeroutput"><span class="identifier">nested_strict_locker</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">condition_locker</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">reverse_locker</span></code>,
+ <code class="computeroutput"><span class="identifier">nested_reverse_locker</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">locking_ptr</span></code>, <code class="computeroutput"><span class="identifier">on_derreference_locking_ptr</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">externally_locked</span></code>,
+ </li>
+</ul></div>
+</li>
+<li>
+ A polymorphic lockable hierarchy.
+ </li>
+<li>
+ High-level abstractions for handling more complicated synchronization
+ problems, including
+ <div class="itemizedlist"><ul type="circle"><li>
+<code class="computeroutput"><span class="identifier">monitor</span></code> for guaranteeing
+ exclusive access to an object, and
+ </li></ul></div>
+</li>
+</ul></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 © 2008 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/synchro/libs/synchro/doc/html/boost_synchro/appendices/implementation.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/implementation.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,50 @@
+<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.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="boost_synchro.appendices.implementation"></a><a href="implementation.html" title=" Appendix C:
+ Implementation Notes"> Appendix C:
+ Implementation Notes</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 © 2008 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/synchro/libs/synchro/doc/html/boost_synchro/appendices/rationale.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/rationale.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,47 @@
+<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.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="history.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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="history.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="boost_synchro.appendices.rationale"></a> Appendix B: Rationale
+</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 © 2008 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="history.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/synchro/libs/synchro/doc/html/boost_synchro/appendices/todo.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/appendices/todo.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,56 @@
+<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.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="boost_synchro.appendices.todo"></a> Appendix E: Future plans
+</h3></div></div></div>
+<a name="boost_synchro.appendices.todo.tasks_to_do_before_review"></a><h4>
+<a name="id4921087"></a>
+ <a href="todo.html#boost_synchro.appendices.todo.tasks_to_do_before_review">Tasks
+ to do before review</a>
+ </h4>
+<div class="itemizedlist"><ul type="disc"><li>
+<code class="computeroutput"><span class="identifier">tuple_locker</span></code> locker containers.
+ </li></ul></div>
+<a name="boost_synchro.appendices.todo.for_later_releases"></a><h4>
+<a name="id4921128"></a>
+ <a href="todo.html#boost_synchro.appendices.todo.for_later_releases">For later
+ releases</a>
+ </h4>
+</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 © 2008 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/synchro/libs/synchro/doc/html/boost_synchro/examples.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/examples.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 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.69.1">
+<link rel="start" href="../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="prev" href="reference/high_level.html" title="High Level">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></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/high_level.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="boost_synchro.examples"></a>Examples
+</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 © 2008 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/high_level.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/synchro/libs/synchro/doc/html/boost_synchro/overview.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/overview.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,250 @@
+<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.69.1">
+<link rel="start" href="../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="prev" href="../index.html" title="Chapter 1. Boost.Synchro">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></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="boost_synchro.overview"></a> Overview
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Introduction</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="overview/intro.html#boost_synchro.overview.intro.uniform"> Using Thread,
+ Interprocess and Null synchronization mechanisms uniformly</a></span></dt>
+<dt><span class="section"><a href="overview/intro.html#boost_synchro.overview.intro.mapping_the_current_mutexes__boost_thread_and_boost_interprocess__to_the_common_concepts">Mapping
+ the current mutexes (Boost.Thread and Boost/Interprocess) to the common concepts</a></span></dt>
+<dt><span class="section"><a href="overview/intro.html#boost_synchro.overview.intro.condition_lockable">Condition
+ lockable</a></span></dt>
+<dt><span class="section"><a href="overview/intro.html#boost_synchro.overview.intro.exception_based_timed_locks">Exception-based
+ Timed Locks</a></span></dt>
+<dt><span class="section"> Lockers</span></dt>
+<dt><span class="section"> Polymorphic lockable</span></dt>
+<dt><span class="section"><a href="overview/intro.html#boost_synchro.overview.intro.language_like_synchronized_block_">Language-like
+ Synchronized Block </a></span></dt>
+<dt><span class="section"> Monitors</span></dt>
+</dl></dd>
+</dl></div>
+<a name="boost_synchro.overview.description"></a><h3>
+<a name="id4803123"></a>
+ Description
+ </h3>
+<p>
+ To date, C++ multi threaded programs that need to be efficient use the same
+ mutexes, semaphores, and events that Dijkstra described 40 years ago. This
+ unfortunate state of affairs makes multi threaded programs difficult to design,
+ debug, ensure correct, optimize, maintain, and analyze formally. Consequently,
+ building tools that automate detection of race conditions and deadlocks is
+ highly desirable.
+ </p>
+<p>
+ I believe that most of the synchronization mechanisms applied to multi-threaded
+ programs works as well for multi-process programs. This can not be done if
+ the basic facilities mutexes and condition variables are not based on common
+ concepts and take a different form depending of the library provider. We need
+ to states these bases through concepts.
+ </p>
+<p>
+ The main sources of inspiration of this library were
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ the papers of Kevlin Henney about asynchronous C++ <a href="http://www.two-sdg.demon.co.uk/curbralan/papers/accu/MoreC++Threading.pdf" target="_top">More
+ C++ Threading - From Procedural to Generic, by Example</a> and its C++0x
+ proposal [<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1883.pdf" target="_top">N1833
+ - Preliminary Threading Library Proposal for TR2</a>].
+ </li>
+<li>
+ the papers of Andrei Alexandrescu on multi-threading programming <a href="http://www.ddj.com/cpp/184403766" target="_top">volatile
+ - Multithreaded Programmer's Best Friend</a>
+</li>
+<li>
+ the ACE framework of Douglas C. Schmidt <a href="http://www.cs.wustl.edu/~schmidt/PDF/ACE-concurrency.pdf" target="_top">An
+ OO Encapsulation of Lightweight OS Concurrency Mechanisms in the ACE Toolkit</a>.
+ </li>
+</ul></div>
+<p>
+ This library is a compilation of what I have found in the literature not yet
+ present in Boost. My main concen has been to boostify all these ideas in a
+ coherent way.
+ </p>
+<p>
+ <span class="bold"><strong>Boost.Synchro</strong></span> provides:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ A uniform usage of Boost.Thread and Boost.Interprocess synchronization mechanisms
+ based on lockables(mutexes) concepts and locker(guards) concepts.
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ lockables traits and lock generators,
+ </li>
+<li>
+ generic free functions on lockables as: <code class="computeroutput"><span class="identifier">lock</span></code>,
+ <code class="computeroutput"><span class="identifier">try_lock</span></code>, ...
+ </li>
+<li>
+ locker adapters of the Boost.Thread and Boost.Interprocess lockers models,
+ </li>
+<li>
+ complete them with the corresponding models for single-threaded programms:
+ <code class="computeroutput"><span class="identifier">null_mutex</span></code> and <code class="computeroutput"><span class="identifier">null_condition</span></code> classes,
+ </li>
+<li>
+ locking families,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">semaphore</span></code> and <code class="computeroutput"><span class="identifier">binary_semaphore</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">condition_lockable</span></code> lock
+ which put toghether a lock and its associated conditions.
+ </li>
+</ul></div>
+</li>
+<li>
+ A coherent way exception based timed lock approach for functions and constructors,
+ </li>
+<li>
+ A rich palete of lockers as
+ <div class="itemizedlist"><ul type="circle">
+<li>
+<code class="computeroutput"><span class="identifier">strict_locker</span></code>, <code class="computeroutput"><span class="identifier">nested_strict_locker</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">condition_locker</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">reverse_locker</span></code>, <code class="computeroutput"><span class="identifier">nested_reverse_locker</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">locking_ptr</span></code>, <code class="computeroutput"><span class="identifier">on_derreference_locking_ptr</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">externally_locked</span></code>,
+ </li>
+</ul></div>
+</li>
+<li>
+<code class="computeroutput"><span class="identifier">array_unique_locker</span></code> on multiple
+ lockables.
+ </li>
+<li>
+ Generic free functions on multiple lockables <code class="computeroutput"><span class="identifier">lock</span></code>,
+ <code class="computeroutput"><span class="identifier">try_lock</span></code>, <code class="computeroutput"><span class="identifier">lock_until</span></code>,
+ <code class="computeroutput"><span class="identifier">lock_for</span></code>, <code class="computeroutput"><span class="identifier">try_lock_until</span></code>,
+ <code class="computeroutput"><span class="identifier">try_lock_for</span></code>, <code class="computeroutput"><span class="identifier">unlock</span></code> * lock adapters of the Boost.Thread
+ and Boost.Interprocess lockable models,
+ <div class="itemizedlist"><ul type="circle"><li>
+<code class="computeroutput"><span class="identifier">lock_until</span></code>, <code class="computeroutput"><span class="identifier">lock_for</span></code>, <code class="computeroutput"><span class="identifier">try_lock_until</span></code>,
+ <code class="computeroutput"><span class="identifier">try_lock_for</span></code>
+</li></ul></div>
+</li>
+<li>
+ A polymorphic lockable hierarchy.
+ </li>
+<li>
+ High-level abstractions for handling more complicated synchronization problems,
+ including
+ <div class="itemizedlist"><ul type="circle"><li>
+<code class="computeroutput"><span class="identifier">monitor</span></code> for guaranteeing
+ exclusive access to an object.
+ </li></ul></div>
+</li>
+<li>
+ Language-like Synchronized Block Macros
+ </li>
+</ul></div>
+<a name="boost_synchro.overview.how_to_use_this_documentation"></a><h3>
+<a name="id4765093"></a>
+ <a href="overview.html#boost_synchro.overview.how_to_use_this_documentation">How to
+ Use This Documentation</a>
+ </h3>
+<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 Synchro files
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">synchro</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">bsynchro</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">synchro</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 © 2008 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/synchro/libs/synchro/doc/html/boost_synchro/overview/intro.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/overview/intro.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,901 @@
+<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.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="boost_synchro.overview.intro"></a> Introduction
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="intro.html#boost_synchro.overview.intro.uniform"> Using Thread,
+ Interprocess and Null synchronization mechanisms uniformly</a></span></dt>
+<dt><span class="section"><a href="intro.html#boost_synchro.overview.intro.mapping_the_current_mutexes__boost_thread_and_boost_interprocess__to_the_common_concepts">Mapping
+ the current mutexes (Boost.Thread and Boost/Interprocess) to the common concepts</a></span></dt>
+<dt><span class="section"><a href="intro.html#boost_synchro.overview.intro.condition_lockable">Condition
+ lockable</a></span></dt>
+<dt><span class="section"><a href="intro.html#boost_synchro.overview.intro.exception_based_timed_locks">Exception-based
+ Timed Locks</a></span></dt>
+<dt><span class="section"> Lockers</span></dt>
+<dt><span class="section"> Polymorphic lockable</span></dt>
+<dt><span class="section"><a href="intro.html#boost_synchro.overview.intro.language_like_synchronized_block_">Language-like
+ Synchronized Block </a></span></dt>
+<dt><span class="section"> Monitors</span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.overview.intro.uniform"></a><a href="intro.html#boost_synchro.overview.intro.uniform" title=" Using Thread,
+ Interprocess and Null synchronization mechanisms uniformly"> Using Thread,
+ Interprocess and Null synchronization mechanisms uniformly</a>
+</h4></div></div></div>
+<p>
+ One of the problems when doing multi threaded application with Boost.Thread
+ and Boost.Interprocess is that the synchronization mechanism of these two
+ libraries even if they are very close since the release 1.35, there are
+ some minor differences that make quite difficult to design a class that
+ can work independently with synchronization mechanisms of both libraries.
+ </p>
+<p>
+ This library proposes some classes that allows to write code that can be
+ used indistinguishably with thread or interprocess synchronization mechanisms.
+ This section is inspired on the work from <span class="bold"><strong>C++ Threading
+ - A Generic-Programming Approach</strong></span> - Kevlin Henney.
+ </p>
+<p>
+ <span class="bold"><strong>Lock substitutability</strong></span>
+ </p>
+<p>
+ The Boost (C++0x) mutexes have associated a category which form a sub-typing
+ hierarchy:
+ </p>
+<pre class="programlisting"><span class="identifier">ExclusiveLockable</span> <span class="special">&lt;-</span> <span class="identifier">SharedLockable</span> <span class="special">&lt;-</span> <span class="identifier">UpgradeLockable</span>
+</pre>
+<p>
+ </p>
+<p>
+
+</p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">exclusive_lock_tag</span> <span class="special">{};</span>
+<span class="keyword">struct</span> <span class="identifier">sharable_lock_tag</span> <span class="special">:</span> <span class="identifier">exclusive_lock_tag</span> <span class="special">{};</span>
+<span class="keyword">struct</span> <span class="identifier">upgradable_lock_tag</span> <span class="special">:</span> <span class="identifier">sharable_lock_tag</span> <span class="special">{};</span>
+</pre>
+<p>
+ </p>
+<p>
+ </p>
+<p>
+ Locking behavior can be further categorized as:
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Re-entrancy: recursive or not
+ </li></ul></div>
+<pre class="programlisting"><span class="identifier">non_recursive</span> <span class="special">&lt;-</span> <span class="identifier">recursive</span>
+</pre>
+<div class="itemizedlist"><ul type="disc"><li>
+ Scope: whether the lock is usable with a mono-threaded, multi-threaded
+ or multi-process context
+ </li></ul></div>
+<pre class="programlisting"><span class="identifier">mono_threaded</span> <span class="special">&lt;-</span> <span class="identifier">multi_threaded</span> <span class="special">&lt;-</span> <span class="identifier">multi_process</span>
+</pre>
+<div class="itemizedlist"><ul type="disc"><li>
+ Lifetime: The lifetime of a lock could be associated to the process,
+ the kernel or the file-system
+ </li></ul></div>
+<pre class="programlisting"><span class="identifier">process_lifetime</span> <span class="special">&lt;-</span> <span class="identifier">kernel_lifetime</span> <span class="special">&lt;-</span> <span class="identifier">filesystem_lifetime</span>
+</pre>
+<div class="itemizedlist"><ul type="disc"><li>
+ Timed interface: has or not a timed interfaces
+ </li></ul></div>
+<pre class="programlisting"><span class="identifier">hasnt_timed_interface</span> <span class="special">&lt;-</span> <span class="identifier">has_timed_interface</span>
+</pre>
+<p>
+ Substitutability applies both to the degree of syntactic support and to
+ the locking semantics
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ A recursive mutex and binary semaphore are substitutable in code written
+ against a exclusive mutex
+ </li>
+<li>
+ A null mutex is substitutable for all others in a single-threaded environment
+ </li>
+</ul></div>
+<p>
+ We can see these axes of variation expressed against some Boost synchronization
+ mechanisms (from now bip stands for boost::interprocess):
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ boost::mutex: ExclusiveLock, non-recursive, has-not-timed-interface,
+ multi-threaded
+ </li>
+<li>
+ boost::shared_mutex: UpgradableLock, non-recursive, has-timed-interface,
+ multi-threaded
+ </li>
+<li>
+ bip::synchro::null_mutex: UpgradableLock, recursive, has-timed-interface,
+ mono-threaded
+ </li>
+<li>
+ bip::synchro::interprocess_recursive_mutex ExclusiveLock, recursive,
+ has-timed-interface, multi_process.
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Lock traits</strong></span>
+ </p>
+<p>
+ The Boost.Synchro library contains a set of very specific traits classes,
+ some of them encapsulate a single trait for a Lockable type; for example,
+ is a lock recursive (is_recursive), is useful in a multi threaded context
+ (is_multi_threaded).
+ </p>
+<p>
+ The Boost.Synchro lock-traits classes share a unified design that mimic
+ the one of Boost.TypeTraits: each class inherits from a the type true_type
+ if the type has the specified property and inherits from false_type otherwise.
+ </p>
+<p>
+ Boost.Synchro also contains a set of classes that perform a specific transformation
+ on a type; for example, they can remove a top-level const or volatile qualifier
+ from a type. Each class that performs a transformation defines a single
+ typedef-member type that is the result of the transformation.
+ </p>
+<p>
+ <span class="bold"><strong>Finding the best lock</strong></span>
+ </p>
+<p>
+ Inverse traits can match a lockable type based on specific traits, for
+ a given family of lock types.
+ </p>
+<p>
+ It is also possible to specify characteristics to perform a reverse lookup
+ to find a primitive lock type, either by exact match or by substitutable
+ match.
+ </p>
+<p>
+ <span class="bold"><strong>Synchronization family</strong></span>
+ </p>
+<p>
+ A class that will do internal locking can be parameterized by the type
+ of synchronization family needed to achieve the desired level of concurrency
+ control. This depends of the usage scope of this class, and this can be
+ mono_threaded, multi_threaded, multi_process.
+ </p>
+<p>
+ For example the thread_synchronization_family can be used to instantiate
+ a message_queue class in a multi_threaded environment, all public methods
+ will be thread-safe, with the corresponding overhead that implies. In contrast,
+ if a null_synchronization_policy class is used to instantiate message_queue,
+ all public methods will not be thread-safe, and there will be no additional
+ overhead.
+ </p>
+<p>
+ <span class="bold"><strong>Syntactic lock traits</strong></span>
+ </p>
+<p>
+ The Boost.Synchro library also contains classes that try to remove the
+ syntactic differences between the synchronization mechanisms of the Boost.Thread
+ and Boost::Interprocess libraries. The differences identified up to now
+ are:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ The scoped locks live in a different namespace and some have different
+ names with the same semantic. IMO these should be shared.
+ </li>
+<li>
+ The exception thrown lives in a different name space and different names
+ with the same semantic.
+ </li>
+<li>
+ This exception should be common.
+ </li>
+<li>
+ The move semantics (&amp;&amp;) are expressed with a class named differently.
+ This class could be a good candidate of Boost library by itself.
+ </li>
+<li>
+ The scoped locks can be initialized with static const variables in order
+ to overload the constructor for lock adoption, lock deferral or try to
+ lock. Even if the name of these variables is the same, these variables
+ live in different namespace. It would be nice if these both libraries
+ use the same type and the same variables
+ </li>
+</ul></div>
+<p>
+ I hope that these two Boost libraries will merge their synchronization
+ mechanisms in a near future. Waiting for this merge this could serve as
+ a temporary solution.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.overview.intro.mapping_the_current_mutexes__boost_thread_and_boost_interprocess__to_the_common_concepts"></a><a href="intro.html#boost_synchro.overview.intro.mapping_the_current_mutexes__boost_thread_and_boost_interprocess__to_the_common_concepts" title="Mapping
+ the current mutexes (Boost.Thread and Boost/Interprocess) to the common concepts">Mapping
+ the current mutexes (Boost.Thread and Boost/Interprocess) to the common concepts</a>
+</h4></div></div></div>
+<p>
+ The mapping from the current mutexes and scoped guards (Boost.Thread and
+ Boost/Interprocess) to the common concepts has been done adding a indirection
+ level. Instead of requiring a given member function, the lockable concepts
+ reside in fre functions. Neither the Boost.Thread nor Boost/Interprocess
+ mutexes and locks are based on functions, but can see them as models of
+ the common lockable and loker concepts by specializing these generic free
+ functions. In order to make easier the mapping these functions call by
+ default to a member function with the equivalent signature.
+ </p>
+<p>
+ For example thread_timed_mutex is viwed as a lockable by specializing the
+ folloxing functions:
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_until</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">void</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">if</span><span class="special">(!</span><span class="identifier">lockable</span><span class="special">.</span><span class="identifier">timed_lock</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">convert_to</span><span class="special">&lt;</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">ptime</span><span class="special">&gt;(</span><span class="identifier">abs_time</span><span class="special">)))</span> <span class="keyword">throw</span> <span class="identifier">timeout_exception</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_for</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">void</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">if</span><span class="special">(!</span><span class="identifier">lockable</span><span class="special">.</span><span class="identifier">timed_lock</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">convert_to</span><span class="special">&lt;</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">time_duration</span><span class="special">&gt;(</span><span class="identifier">rel_time</span><span class="special">)))</span> <span class="keyword">throw</span> <span class="identifier">timeout_exception</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_until</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_until</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">lockable</span><span class="special">.</span><span class="identifier">timed_lock</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">convert_to</span><span class="special">&lt;</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">ptime</span><span class="special">&gt;(</span><span class="identifier">abs_time</span><span class="special">));</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_for</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_for</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">lockable</span><span class="special">.</span><span class="identifier">timed_lock</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">convert_to</span><span class="special">&lt;</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">time_duration</span><span class="special">&gt;(</span><span class="identifier">rel_time</span><span class="special">));</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Note that only the functions for which the equivalent signature differ
+ are defined. For the others the default works as expected.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.overview.intro.condition_lockable"></a><a href="intro.html#boost_synchro.overview.intro.condition_lockable" title="Condition
+ lockable">Condition
+ lockable</a>
+</h4></div></div></div>
+<p>
+ Based on the idead of Kevlin Henney, the library provides condition lockable,
+ which allows a condition variable to be associated with a Lockable.
+ </p>
+<p>
+ Treating condition locking as a property of Lockable rather than viceversa
+ has the benefit of making clear how something is locked and accessed, as
+ it were emphasising it in the first person.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">product_queue</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="special">...</span>
+ <span class="identifier">product</span> <span class="special">*</span><span class="identifier">pull</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">mtx</span><span class="special">.</span><span class="identifier">lock</span><span class="special">();</span>
+ <span class="keyword">while</span><span class="special">(</span><span class="identifier">queue</span><span class="special">.</span><span class="identifier">empty</span><span class="special">())</span>
+ <span class="identifier">guard</span><span class="special">.</span><span class="identifier">relock_on</span><span class="special">(</span><span class="identifier">not_empty</span><span class="special">);</span>
+ <span class="identifier">product</span> <span class="special">*</span><span class="identifier">pulled</span> <span class="special">=</span> <span class="identifier">queue</span><span class="special">.</span><span class="identifier">front</span><span class="special">();</span>
+ <span class="identifier">queue</span><span class="special">.</span><span class="identifier">pop</span><span class="special">();</span>
+ <span class="identifier">mtx</span><span class="special">.</span><span class="identifier">unlock</span><span class="special">();</span>
+ <span class="keyword">return</span> <span class="identifier">pulled</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ Requiring the user of a condition variable to implement a while loop to
+ verify a condition's predicate is potentially error prone. It can be better
+ encapsulated by passing the predicate as a function object to the locking
+ function.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">product_queue</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="special">...</span>
+ <span class="identifier">product</span> <span class="special">*</span><span class="identifier">pull</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">mtx</span><span class="special">.</span><span class="identifier">lock_when</span><span class="special">(</span><span class="identifier">not_empty</span><span class="special">,</span> <span class="identifier">has_products</span><span class="special">(</span><span class="identifier">queue</span><span class="special">));</span>
+ <span class="identifier">product</span> <span class="special">*</span><span class="identifier">pulled</span> <span class="special">=</span> <span class="identifier">queue</span><span class="special">.</span><span class="identifier">front</span><span class="special">();</span>
+ <span class="identifier">queue</span><span class="special">.</span><span class="identifier">pop</span><span class="special">();</span>
+ <span class="identifier">mtx</span><span class="special">.</span><span class="identifier">unlock</span><span class="special">();</span>
+ <span class="keyword">return</span> <span class="identifier">pulled</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="boost_synchro.overview.intro.exception_based_timed_locks"></a><a href="intro.html#boost_synchro.overview.intro.exception_based_timed_locks" title="Exception-based
+ Timed Locks">Exception-based
+ Timed Locks</a>
+</h4></div></div></div>
+<p>
+ Based on the idead of Kevlin Henney, the library supports timeout exception
+ for all the locking functions having a time or duration parameter.
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ A lock with a timeout parameter, i.e. a time or a duration, throws a
+ <code class="computeroutput"><span class="identifier">timeout_exception</span></code> on
+ expiry
+ </li>
+<li>
+ A <code class="computeroutput"><span class="identifier">try_lock</span></code> with a timeout
+ simply returns false on expiry
+ </li>
+<li>
+ Any of the conditional locks throw a <code class="computeroutput"><span class="identifier">timeout_exception</span></code>
+ on expiry
+ </li>
+<li>
+ all the locker constructors with the first parameter a timeout.
+ </li>
+</ul></div>
+<p>
+ Use of timeouts can create more robust programs, by not blocking forever,
+ but at the same time one needs to avoid annoyingly arbitrary limits.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.overview.intro.lockers"></a> Lockers
+</h4></div></div></div>
+<p>
+ Typically, object-oriented programs use object-level locking by associating
+ a synchronization object (mutex) with each object that is susceptible to
+ be shared between threads. Then, code that manipulates the state of the
+ object can synchronize by locking that object. Inside a synchronized section,
+ the mutex associated with the object is locked, and consequently that object's
+ fields can be accessed safely.
+ </p>
+<p>
+ In C++, this fundamental idiom is typically implemented with a helper Locker
+ object or lock guard.
+ </p>
+<p>
+ A locker is any object or function responsible for coordinating the use
+ of lockable objects.
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Lockers depend on lockable objects - which need not be locking primitives
+ - and not vice-versa. This avoids cycles in the dependency graph.
+ </li>
+<li>
+ Lockers are applications of lockable objects and, as such, form a potentially
+ unbounded family. Most common role of lockers is for exception safety
+ and programming convenience
+ </li>
+<li>
+ Lockers execute-around the lock-unlock pairing.
+ </li>
+</ul></div>
+<p>
+ A locker defines an execution strategy for locking and unlocking that is
+ automated by construction and destruction. It simplifies common use of
+ locking, and does so in an exception-safe fashion. As such, lockers depend
+ on the interface of lockables -e.g. lock and unlock - but lockables do
+ not depend on lockers. The relationship is strictly layered, open and extensible:
+ lockable types may be whole, externally locked objects against which existing
+ lockers can be used; new lockers can be defined that work against existing
+ lockable types.
+ </p>
+<p>
+ Substitutability between lockables and lockers does not make sense, so
+ the constructor is always explicit. Implicit copyability is also disabled.
+ </p>
+<p>
+ Boost.Thread and Boost.Interprocess defines already a good starting point
+ with these lockers:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lock_guard</span></code>,
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span></code>, <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">unique_lock</span></code>
+ and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>
+</li>
+<li>
+<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">share_lock</span></code> and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">sharable_lock</span></code>
+</li>
+<li>
+<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">upgrade_lock</span></code> and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">upgradable_lock</span></code>.
+ </li>
+</ul></div>
+<p>
+ The problem is that even if these locker models the same model, there is
+ no a single syntax.
+ </p>
+<p>
+ The library defines some locker adapters which take care of naming differences
+ and that can be used like
+ </p>
+<pre class="programlisting"><span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">unique_locker</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">scoped</span><span class="special">(</span><span class="identifier">guard</span><span class="special">);</span>
+</pre>
+<p>
+ or
+ </p>
+<pre class="programlisting"><span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">unique_locker</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">interprocess_mutex</span><span class="special">&gt;</span> <span class="identifier">scoped</span><span class="special">(</span><span class="identifier">guard</span><span class="special">);</span>
+</pre>
+<p>
+ <span class="bold"><strong>Strict lockers</strong></span>
+ </p>
+<p>
+ Strict lockers were first introduced by Andrei Alexandrescu. A strict locker
+ is a scoped lock guard ensuring the mutex is locked on the scope of the
+ lock, by locking the mutex on construction and unlocking it on destruction.
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lock_guard</span></code> could be seen as a strict_locker
+ if the following constructor didn't exists
+ </p>
+<pre class="programlisting"><span class="identifier">lock_guard</span><span class="special">(</span><span class="identifier">Lockable</span> <span class="special">&amp;</span> <span class="identifier">m</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adopt_lock_t</span><span class="special">)</span>
+</pre>
+<p>
+ We can say that lock_guard is a strict locker "sur parolle".
+ </p>
+<p>
+ There is a const function that is very useful when working with strict
+ lockers and external locking which check is the strict locker is locking
+ an instace of a lockable.
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_locking</span><span class="special">(</span><span class="identifier">lockable_type</span><span class="special">*</span> <span class="identifier">l</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+ The library provides three strict lockers
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">strict_locker</span></code>: is the
+ basic strict locker, special use when doing external locking.
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">neested_strict_locker</span></code>:
+ is a strict_locker of another locker as a unique_lock.
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">conditional_unique_locker</span></code>
+ and <code class="computeroutput"><span class="identifier">conditional_shared_locker</span></code>
+ : are strict lockers with the condition_lockable interface. These are
+ the synchronizer of the monitor class.
+ </li>
+</ul></div>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">product_queue</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="special">...</span>
+ <span class="identifier">product</span> <span class="special">*</span><span class="identifier">pull</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">conditional_unique_locker</span><span class="special">&lt;&gt;</span> <span class="identifier">_</span><span class="special">(</span><span class="identifier">mtx</span><span class="special">,</span> <span class="identifier">not_empty</span><span class="special">,</span> <span class="identifier">has_products</span><span class="special">(</span><span class="identifier">queue</span><span class="special">));</span>
+ <span class="identifier">product</span> <span class="special">*</span><span class="identifier">pulled</span> <span class="special">=</span> <span class="identifier">queue</span><span class="special">.</span><span class="identifier">front</span><span class="special">();</span>
+ <span class="identifier">queue</span><span class="special">.</span><span class="identifier">pop</span><span class="special">();</span>
+ <span class="identifier">mtx</span><span class="special">.</span><span class="identifier">unlock</span><span class="special">();</span>
+ <span class="keyword">return</span> <span class="identifier">pulled</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ and a meta function <code class="computeroutput"><span class="identifier">is_strict_locker</span></code>
+ which states if a locker is a strict locker.
+ </p>
+<p>
+ So as strict lockers do not provide lock/unlock functions they are not
+ models of Lockable.
+ </p>
+<p>
+ <span class="bold"><strong>Try lockers</strong></span>
+ </p>
+<p>
+ A Try Locker is a Locker that initialize it in a such way that instead
+ of locking on the constructor with <code class="computeroutput"><span class="identifier">lock</span><span class="special">()</span></code> they can try to lock with <code class="computeroutput"><span class="identifier">try_lock</span><span class="special">()</span></code>.
+ Most of the lockers defined in Boost.Thread and Boost.Interprocess could
+ be cosidered as <code class="computeroutput"><span class="identifier">TryLockers</span></code>,
+ i.e. them initialize in this way when <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">try_to_lock</span></code>
+ is given as parameter.
+ </p>
+<p>
+ The following code shows one way to use the TryLocker:
+ </p>
+<pre class="programlisting"><span class="identifier">product</span> <span class="special">*</span><span class="identifier">product_queue</span><span class="special">::</span><span class="identifier">try_pull</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">product</span> <span class="special">*</span><span class="identifier">pulled</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">locker</span><span class="special">(</span><span class="identifier">mtx</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">try_to_lock</span><span class="special">);</span>
+ <span class="keyword">if</span><span class="special">(</span><span class="identifier">locker</span> <span class="special">&amp;&amp;</span> <span class="special">!</span><span class="identifier">queue</span><span class="special">.</span><span class="identifier">empty</span><span class="special">())</span> <span class="special">{</span>
+ <span class="identifier">pulled</span> <span class="special">=</span> <span class="identifier">queue</span><span class="special">.</span><span class="identifier">front</span><span class="special">();</span>
+ <span class="identifier">queue</span><span class="special">.</span><span class="identifier">pop</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="keyword">return</span> <span class="identifier">pulled</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ All of them use a safe strategy for a boolean conversion which use a member
+ pointer rather than a <code class="computeroutput"><span class="keyword">bool</span></code>,
+ which is typically too permissive:
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">try_locker</span><span class="special">::*</span><span class="identifier">is_locked</span><span class="special">;</span>
+<span class="keyword">operator</span> <span class="identifier">is_locked</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">locked</span> <span class="special">?</span> <span class="special">&amp;</span><span class="identifier">try_locker</span><span class="special">::</span><span class="identifier">locked</span> <span class="special">:</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ If we use interprocess mutexes we need to replace the following line
+ </p>
+<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">scoped</span><span class="special">(</span><span class="identifier">guard</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">try_to_lock</span><span class="special">);</span>
+</pre>
+<p>
+ by
+ </p>
+<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">scoped_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">interprocess_mutex</span><span class="special">&gt;</span> <span class="identifier">scoped</span><span class="special">(</span><span class="identifier">guard</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">try_to_lock</span><span class="special">);</span>
+</pre>
+<p>
+ There are other <code class="computeroutput"><span class="identifier">TryLockers</span></code>
+ in Boost.Thread defined as a member typedef <code class="computeroutput"><span class="identifier">scoped_try_lock</span></code>.
+ The semantics of each constructor and member function are identical to
+ those of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;</span></code>
+ for the same Lockable, except that the constructor that takes a single
+ reference to a mutex will call <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">try_lock</span><span class="special">()</span></code> rather than <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">lock</span><span class="special">()</span></code>.
+ </p>
+<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span> <span class="identifier">locker</span><span class="special">(</span><span class="identifier">mtx</span><span class="special">);</span>
+</pre>
+<p>
+ The library defines in a generic way a try_unique_locker adapter which
+ takes care of naming differences and that can be used like
+ </p>
+<pre class="programlisting"><span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">unique_try_locker</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="identifier">locker</span><span class="special">(</span><span class="identifier">mtx</span><span class="special">);</span>
+</pre>
+<p>
+ for any model of Lockable.
+ </p>
+<p>
+ <span class="bold"><strong>Exception-based Timed Lockers</strong></span>
+ </p>
+<p>
+ In addition to supporting timeout exception for Lock, the library supports
+ them also for ExceptionBaseTimedLockers. The semantics of each constructor
+ and member function are identical to those of boost::unique_locker&lt;Lockable&gt;
+ for the same Lockable, except that the constructor that takes a time or
+ a duration as first parameter in a addition to the reference to a mutex
+ will call <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">lock_until</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code> or
+ <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">lock_for</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> rather
+ than <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">try_lock_until</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code> or
+ <code class="computeroutput"><span class="identifier">m</span><span class="special">.</span><span class="identifier">try_lock_for</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> and
+ so a <code class="computeroutput"><span class="identifier">timeout_exception</span></code>
+ is possible on the constructor.
+ </p>
+<p>
+ Let me start with an example of an application needing to lock several
+ locks at the same time. Once all the locks are locked something must be
+ done. Otherwise the application do something else and reiterate the lock
+ requests. The natural and exception safe way to do that is
+ </p>
+<pre class="programlisting"><span class="keyword">while</span> <span class="special">(</span><span class="identifier">polling</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">=</span><span class="identifier">now</span><span class="special">()+</span><span class="number">100</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l1</span><span class="special">(</span><span class="identifier">m1</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l2</span><span class="special">(</span><span class="identifier">m2</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l3</span><span class="special">(</span><span class="identifier">m3</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l1</span><span class="special">.</span><span class="identifier">has_lock</span><span class="special">()</span> <span class="special">&amp;&amp;</span> <span class="identifier">l2</span><span class="special">.</span><span class="identifier">has_lock</span><span class="special">()</span> <span class="special">&amp;&amp;</span> <span class="identifier">l3</span><span class="special">.</span><span class="identifier">has_lock</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">polling</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="identifier">execute_on_failed</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The problem with this code is that it locks <code class="computeroutput"><span class="identifier">m2</span></code>
+ even if <code class="computeroutput"><span class="identifier">l1</span></code> do not owns
+ the lock <code class="computeroutput"><span class="identifier">m1</span></code>. The advertised
+ reader could argument that if the lock m1 has not been locked by a timeout,
+ as all share the same time constraint the failing lock of m2 will not be
+ expensive. Well the problem is that the locking of m1 can fail because
+ m1 is already locked. When we try to optimize this
+ </p>
+<pre class="programlisting"><span class="keyword">while</span> <span class="special">(</span><span class="identifier">polling</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">t</span><span class="special">=</span><span class="identifier">now</span><span class="special">()+</span><span class="number">100</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l1</span><span class="special">(</span><span class="identifier">m1</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l1</span><span class="special">.</span><span class="identifier">has_lock</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l2</span><span class="special">(</span><span class="identifier">m2</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l2</span><span class="special">.</span><span class="identifier">has_lock</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l3</span><span class="special">(</span><span class="identifier">m3</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l2</span><span class="special">.</span><span class="identifier">has_lock</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">polling</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="identifier">execute_on_failed</span><span class="special">();</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="identifier">execute_on_failed</span><span class="special">();</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="identifier">execute_on_failed</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+<p>
+ we found that this starts to be unmaintenable. What is event wrost is that
+ as the preceding one is subject to deadlock if another thread acquire the
+ locks in a different order.
+ </p>
+<p>
+ <span class="bold"><strong>try_lock_until and try_lock_for free functions</strong></span>
+ </p>
+<p>
+ To avoid this we can request the acquisition of all the locks toghether
+ (letting the function to try several orders), as it does the function try_lock
+ of Boost.Threads, but adding this time a expiration period parameter
+ </p>
+<pre class="programlisting"><span class="keyword">while</span> <span class="special">(</span><span class="identifier">polling</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">try_lock_for</span><span class="special">(</span><span class="number">100</span><span class="special">,</span> <span class="identifier">m1</span><span class="special">,</span> <span class="identifier">m2</span><span class="special">,</span> <span class="identifier">m3</span><span class="special">))</span> <span class="special">{</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">polling</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="identifier">execute_on_failed</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+<p>
+ While this solve the deadlock problem, this code is not exception safe.
+ With exception based lockers we can do the following (note that the time
+ is given as first aregument to the locker constructor)
+ </p>
+<pre class="programlisting"><span class="keyword">while</span> <span class="special">(</span><span class="identifier">polling</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">now</span><span class="special">()+</span><span class="number">100</span><span class="special">;</span>
+ <span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">unique_locker</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l1</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">m1</span><span class="special">);</span>
+ <span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">unique_locker</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l2</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">m2</span><span class="special">);</span>
+ <span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">unique_locker</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">l3</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">m3</span><span class="special">);</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">polling</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+ <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">timeout_exception</span><span class="special">&amp;</span> <span class="identifier">ex</span><span class="special">)</span> <span class="special">{</span><span class="identifier">execute_on_failed</span><span class="special">();</span> <span class="special">}</span>
+</pre>
+<p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">locker_tuples</span></code>
+ or <code class="computeroutput"><span class="identifier">locker_array</span></code> of Locker
+ containers</strong></span>
+ </p>
+<p>
+ While this code is exception safe and do not locks <code class="computeroutput"><span class="identifier">m2</span></code>
+ if <code class="computeroutput"><span class="identifier">m1</span></code> is not acquired,
+ it is subject to deadlock. We can go a step ahead and mix the advantage
+ of taking all the locks at once and making the acquisition block scoped.
+ In order to do that we need either a array_locker or a tuple_locker depending
+ on whether the locks are homogeneus or not. The library provides both of
+ them. These locker containers follows the same rules as the element wise
+ lockers. If the time comes after the locks no exception is thrown on timeout
+ and if given as the first parameter a exception will be thown when the
+ time will expire.
+ </p>
+<p>
+ So the preceding code becomes without timeout exceptions
+ </p>
+<pre class="programlisting"><span class="keyword">while</span> <span class="special">(</span><span class="identifier">polling</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">array_unique_locker</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;</span> <span class="identifier">lk</span><span class="special">(</span><span class="identifier">m1</span><span class="special">,</span> <span class="identifier">m2</span><span class="special">,</span> <span class="identifier">m3</span><span class="special">,</span> <span class="number">100</span><span class="special">);</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">lk</span><span class="special">.</span><span class="identifier">owns_lock</span><span class="special">())</span> <span class="special">{</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">polling</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="identifier">execute_on_failed</span><span class="special">();</span>
+<span class="special">}</span>
+</pre>
+<p>
+ which is exception safe or with exception based timed locks (Note that
+ the time is given before the locks)
+ </p>
+<pre class="programlisting"><span class="keyword">while</span> <span class="special">(</span><span class="identifier">polling</span><span class="special">)</span>
+<span class="keyword">try</span> <span class="special">{</span> <span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">array_locker</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;</span> <span class="identifier">lk</span><span class="special">(</span><span class="number">100</span><span class="special">,</span> <span class="identifier">m1</span><span class="special">,</span> <span class="identifier">m2</span><span class="special">,</span> <span class="identifier">m3</span><span class="special">);</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">polling</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+<span class="special">}</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">timeout_exception</span><span class="special">&amp;</span> <span class="identifier">ex</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">execute_on_failed</span><span class="special">();</span> <span class="special">}</span>
+</pre>
+<p>
+ When the Locks locked by an <code class="computeroutput"><span class="identifier">array_unique_locker</span></code>
+ are not homogeneus we need some kind of tuple.
+ </p>
+<pre class="programlisting"><span class="keyword">while</span> <span class="special">(</span><span class="identifier">polling</span><span class="special">)</span>
+<span class="keyword">try</span> <span class="special">{</span> <span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">tuple_unique_locker</span><span class="special">&lt;</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">T2</span><span class="special">,</span> <span class="identifier">T1</span><span class="special">&gt;</span> <span class="identifier">lk</span><span class="special">(</span><span class="number">100</span><span class="special">,</span> <span class="identifier">m1</span><span class="special">,</span> <span class="identifier">m2</span><span class="special">,</span> <span class="identifier">m3</span><span class="special">);</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">polling</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+<span class="special">}</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">timed_exception</span><span class="special">&amp;</span> <span class="identifier">ex</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">execute_on_failed</span><span class="special">();</span> <span class="special">}</span>
+</pre>
+<p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">lock_until</span></code>
+ and <code class="computeroutput"><span class="identifier">lock_for</span></code> free functions</strong></span>
+ </p>
+<p>
+ For completion the exception based timed multi lock functions <code class="computeroutput"><span class="identifier">unlock</span></code>, <code class="computeroutput"><span class="identifier">lock_until</span></code>
+ and <code class="computeroutput"><span class="identifier">lock_for</span></code> are also provided.
+ </p>
+<pre class="programlisting"><span class="keyword">while</span> <span class="special">(</span><span class="identifier">polling</span><span class="special">)</span>
+ <span class="keyword">try</span> <span class="special">{</span>
+ <span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">lock_for</span><span class="special">(</span><span class="number">100</span><span class="special">,</span> <span class="identifier">m1</span><span class="special">,</span> <span class="identifier">m2</span><span class="special">,</span> <span class="identifier">m3</span><span class="special">);</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="identifier">polling</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span>
+ <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(</span><span class="identifier">bsynchro</span><span class="special">::</span><span class="identifier">timeout_exception</span><span class="special">&amp;</span> <span class="identifier">ex</span><span class="special">)</span> <span class="special">{</span><span class="identifier">execute_on_failed</span><span class="special">();</span> <span class="special">}</span>
+</pre>
+<p>
+ <span class="bold"><strong>External lockers</strong></span>
+ </p>
+<p>
+ An alternative or complementary approach to internal locking is to support
+ external locking for an object - Multiple calls may be grouped within the
+ same externally defined critical region.
+ </p>
+<p>
+ External locking has some associated risks for high-level objects. Incorrect
+ usage can be too easy: a forgotten call to lock or unlock is more likely
+ than with synchronisation primitives because the focus of using the object
+ is on the rest of its non-Lockable interface, so it becomes easy to forget
+ that to use the interface correctly also requires participation in a locking
+ scheme.
+ </p>
+<p>
+ To some extent lockers can help, but such a co-operative scheme should
+ only be employed when internal locking is too restricted for a given use,
+ e.g. multiple operations must be performed together. Ideally, if such operations
+ are common they should be defined internally locked and defined in the
+ interface of the object as Combined Methods.
+ </p>
+<p>
+ Assuming that locks are re-entrant, external locking can be provided to
+ complement the more encapsulated internal locking, i.e. by default if you
+ want to call a single function you just call it and it automatically locks,
+ but if you want to call multiple functions together you first apply an
+ external lock.
+ </p>
+<p>
+ The library provides a <code class="computeroutput"><span class="identifier">externally_locked</span></code>
+ class that allows to access a externally locked class in a thread safe
+ mode through strict lockers.
+ </p>
+<p>
+ Where only external locking is used, a safe approach is needed for calling
+ single functions easily. The library provides two classes
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">locking_ptr</span></code> and
+ </li>
+<li><code class="computeroutput"><span class="identifier">on_dereference_locking_ptr</span></code></li>
+<li><code class="computeroutput"><span class="identifier">externally_locked</span></code></li>
+</ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.overview.intro.poly"></a> Polymorphic lockable
+</h4></div></div></div>
+<p>
+ The locks classes introduced previously are a non-polymorphic classes.
+ Clearly, many of the synchronisation primitives support common operations,
+ and hence interfaces. In some cases a more general interface is useful.
+ </p>
+<p>
+ The synchronised interface class may be used explicitly as a base class
+ for a class supporting synchronisation.
+ </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">exclusive_lock</span> <span class="special">{</span>
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">exclusive_lock</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">lock</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">unlock</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">try_lock</span><span class="special">()=</span><span class="number">0</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ More usefully for primitives, which are best left as non-polymorphic, an
+ adaptor class is used to provide the interface -- run-time polymorphism
+ -- on behalf of anything supporting the correctly named functions - compile
+ time polymorphism. It easier to take a nonpolymorphic class and adapt it
+ to be polymorphic, than it is do it the other way around: the overhead
+ and semantics of polymorphism can only be introduced to a class, not removed.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">exclusive_lock_adapter</span> <span class="special">:</span> <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="identifier">exclusive_lock</span>
+<span class="special">{</span>
+ <span class="identifier">exclusive_lock_adapter</span><span class="special">():</span> <span class="identifier">lock_</span><span class="special">()</span> <span class="special">{}</span>
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">exclusive_lock_adapter</span><span class="special">()</span> <span class="special">{}</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">lock</span><span class="special">()</span> <span class="special">{</span><span class="identifier">lock_</span><span class="special">.</span><span class="identifier">lock</span><span class="special">();}</span>
+ <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">unlock</span><span class="special">()</span> <span class="special">{</span><span class="identifier">lock_</span><span class="special">.</span><span class="identifier">unlock</span><span class="special">();}</span>
+ <span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">try_lock</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">lock_</span><span class="special">.</span><span class="identifier">try_lock</span><span class="special">();}</span>
+<span class="keyword">protected</span><span class="special">:</span>
+ <span class="identifier">Lockable</span> <span class="identifier">lock_</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="boost_synchro.overview.intro.language_like_synchronized_block_"></a><a href="intro.html#boost_synchro.overview.intro.language_like_synchronized_block_" title="Language-like
+ Synchronized Block ">Language-like
+ Synchronized Block </a>
+</h4></div></div></div>
+<p>
+ Nest follows an example of mutual exclusion with automatic objects.
+ </p>
+<pre class="programlisting"><span class="special">{</span>
+ <span class="identifier">scoped_guard</span><span class="special">&lt;</span><span class="identifier">boost_mutex</span><span class="special">&gt;</span> <span class="identifier">lock</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="keyword">return</span> <span class="identifier">bar</span><span class="special">();</span> <span class="comment">// lock released
+</span><span class="special">}</span>
+</pre>
+<p>
+ With language-like mutual exclusion this results in:
+ </p>
+<pre class="programlisting"><span class="identifier">synchronize</span><span class="special">(</span><span class="identifier">l</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">foo</span><span class="special">();</span>
+ <span class="keyword">return</span> <span class="identifier">bar</span><span class="special">();</span>
+<span class="special">}</span> <span class="comment">// lock released
+</span></pre>
+<p>
+ This is achieved through macros. If the user wants to use synchronized
+ this way he needs to include a specific file which defines
+ </p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">synchronized</span><span class="special">(</span><span class="identifier">MUTEX</span><span class="special">)</span> <span class="identifier">BOOST_SYNCHRONIZED</span><span class="special">(</span><span class="identifier">MUTEX</span><span class="special">)</span>
+</pre>
+<p>
+ The library do not provides this directly because this can broke some user
+ code. The library provideds other safer macros, using the BOOST prefix.
+ </p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_SYNCHRONIZED_VAR</span><span class="special">(</span><span class="identifier">VARS_DECLARATION</span><span class="special">)</span> <span class="special">\</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="keyword">bool</span> <span class="identifier">stop_</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">)</span> <span class="special">{}</span> <span class="keyword">else</span> <span class="special">\</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">VARS_DECLARATION</span><span class="special">;</span> <span class="special">!</span><span class="identifier">stop_</span><span class="special">;</span> <span class="identifier">stop_</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">)</span>
+
+<span class="preprocessor">#define</span> <span class="identifier">BOOST_SYNCHRONIZED</span><span class="special">(</span><span class="identifier">MUTEX</span><span class="special">)</span> <span class="special">\</span>
+ <span class="identifier">BOOST_SYNCHRONIZED_VAR</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">scoped_guard</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span> <span class="identifier">__lock</span><span class="special">(</span><span class="identifier">MUTEX</span><span class="special">))</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.overview.intro.monitors"></a> Monitors
+</h4></div></div></div>
+<p>
+ Concurrent components may interact in different ways: they may access the
+ same objects by, for example, executing functions of these objects; or
+ they may communicate directly by executing functions of each other.
+ </p>
+<p>
+ Concurrent execution of objects requires a mechanism for synchronizing
+ the access to shared objects, just as direct communication between objects
+ may require synchronization. The basic mechanism for synchronization in
+ Boost.Threads and Boost.Interprocess are the well known mutex and condition_variables.
+ Mutexes and condition variables are, however, only useful for very simple
+ synchronization problems. The Synchro Library therefore introduce high-level
+ abstractions for handling more complicated synchronization problems, including
+ monitor for guaranteeing exclusive access to an object.
+ </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 © 2008 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/synchro/libs/synchro/doc/html/boost_synchro/reference.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,200 @@
+<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.69.1">
+<link rel="start" href="../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="prev" href="users_guide/glosary.html" title=" Glossary">
+<link rel="next" href="reference/lockables.html" title="Lockables">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></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/lockables.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="boost_synchro.reference"></a>Reference
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">Lockables</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_traits</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="reference/lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_concepts</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="reference/lockables.html#boost_synchro.reference.lockables.lock_generator_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lock_generator</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="reference/lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_adapter</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"><a href="reference/generic_free_functions_on_lockable.html">Generic
+ Free Functions on Lockable</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_until</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_for</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_until</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_for</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_shared</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_shared</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_shared_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_shared_for</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared_until</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared_for</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_upgrade</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_upgrade_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_upgrade_until</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade_until</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade_for</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_and_lock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_and_lock_upgrade</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_and_lock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_and_lock_shared</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_shared</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_until</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_for</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_upgrade_and_lock_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_upgrade_and_lock_until</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_upgrade_and_lock_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_upgrade_and_lock_for</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_shared_and_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_shared_and_lock</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_shared_and_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_shared_and_lock_hpp</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="reference/generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_shared_and_lock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_shared_and_lock_upgrade</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"><a href="reference/generic_free_functions_on_multiple_lockables.html">Generic
+ Free Functions on Multiple Lockables</a></span></dt>
+<dt><span class="section"><a href="reference/condition_lockables.html">Condition
+ Lockables</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/condition_lockables.html#boost_synchro.reference.condition_lockables.condition_safe_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">condition_safe</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="reference/condition_lockables.html#boost_synchro.reference.condition_lockables.condition_backdoor_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">condition_backdoor</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="reference/condition_lockables.html#boost_synchro.reference.condition_lockables.condition_lockable_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">condition_lockable</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">Lockers</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker_concepts</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="reference/lockers.html#boost_synchro.reference.lockers.is_strict_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">is_strict_locker</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="reference/lockers.html#boost_synchro.reference.lockers.strict_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">strict_locker</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="reference/lockers.html#boost_synchro.reference.lockers.reverse_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">reverse_locker</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="reference/lockers.html#boost_synchro.reference.lockers.nested_reverse_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">nested_reverse_locker</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="reference/lockers.html#boost_synchro.reference.lockers.condition_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">condition_locker</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="reference/lockers.html#boost_synchro.reference.lockers.externally_locked_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">externally_locked</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="reference/lockers.html#boost_synchro.reference.lockers.locking_ptr_hpp"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">locking_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/lockers.html#boost_synchro.reference.lockers.on_derreference_locking_ptr_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">on_derreference_locking_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/lockers.html#boost_synchro.reference.lockers.array_unique_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">array_unique_locker</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">Single-threaded</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/single_threaded.html#boost_synchro.reference.single_threaded.null_mutex_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">null_mutex</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="reference/single_threaded.html#boost_synchro.reference.single_threaded.null_condition_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">null_condition</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="reference/single_threaded.html#boost_synchro.reference.single_threaded.null_synchronization_family_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">null_synchronization_family</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">Multi-threaded</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/multi_threaded.html#boost_synchro.reference.multi_threaded.thread_lockable_scope_traits_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">lockable_scope_traits</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="reference/multi_threaded.html#boost_synchro.reference.multi_threaded.thread_mutex_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">mutex</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="reference/multi_threaded.html#boost_synchro.reference.multi_threaded.thread_recursive_mutex_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">thread_recursive_mutex</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="reference/multi_threaded.html#boost_synchro.reference.multi_threaded.thread_shared_mutex_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">shared_mutex</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="reference/multi_threaded.html#boost_synchro.reference.multi_threaded.thread_locks_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">locks</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="reference/multi_threaded.html#boost_synchro.reference.multi_threaded.thread_synchronization_family_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">thread_synchronization_family</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">Multi-process</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/multi_process.html#boost_synchro.reference.multi_process.thread_lockable_scope_traits_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">lockable_scope_traits</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="reference/multi_process.html#boost_synchro.reference.multi_process.process_synchronization_family_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">process_synchronization_family</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"><a href="reference/polymorphic_locks.html">Polymorphic
+ Locks</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/polymorphic_locks.html#boost_synchro.reference.polymorphic_locks.poly_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">poly</span><span class="special">/</span><span class="identifier">lock</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="reference/polymorphic_locks.html#boost_synchro.reference.polymorphic_locks.poly_lock_adpater_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">poly</span><span class="special">/</span><span class="identifier">lock_adpater</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">Other</span></dt>
+<dd><dl><dt><span class="section"><a href="reference/other.html#boost_synchro.reference.other.semaphore_hpp"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">semaphore</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">High Level</span></dt>
+<dd><dl><dt><span class="section"><a href="reference/high_level.html#boost_synchro.reference.high_level.monitor_hpp"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">monitor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></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 © 2008 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/lockables.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/condition_lockables.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/condition_lockables.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,205 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Condition
+ Lockables</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="generic_free_functions_on_multiple_lockables.html" title="Generic
+ Free Functions on Multiple Lockables">
+<link rel="next" href="lockers.html" title="Lockers">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="generic_free_functions_on_multiple_lockables.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="lockers.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="boost_synchro.reference.condition_lockables"></a><a href="condition_lockables.html" title="Condition
+ Lockables">Condition
+ Lockables</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_safe_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">condition_safe</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="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_safe_hpp.template_class__condition_safe_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_safe</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_backdoor_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">condition_backdoor</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="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_backdoor_hpp.template_class__condition_backdoor_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_backdoor</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_lockable_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">condition_lockable</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="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_lockable_hpp.template_class__condition_lockable_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_lockable</span></code></a></span></dt></dl></dd>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.condition_lockables.condition_safe_hpp"></a><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_safe_hpp" title="
+ Header &lt;boost/synchro/locker/condition_safe.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">condition_safe</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_safe_hpp.template_class__condition_safe_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_safe</span></code></a></span></dt></dl></div>
+<p>
+ Wraps a condition variable in order make public only the safe functions,
+ and let the others accesible via a backdoor.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">condition_safe</span><span class="special">;</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.condition_lockables.condition_safe_hpp.template_class__condition_safe_"></a><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_safe_hpp.template_class__condition_safe_" title="Template
+ Class condition_safe">Template
+ Class <code class="computeroutput"><span class="identifier">condition_safe</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">condition_safe</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">Condition</span> <span class="identifier">condition</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">condition_backdoor</span><span class="special">&lt;</span><span class="identifier">Condition</span><span class="special">&gt;</span> <span class="identifier">backdoor</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">notify_one</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">notify_all</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.condition_lockables.condition_backdoor_hpp"></a><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_backdoor_hpp" title="
+ Header &lt;boost/synchro/condition_backdoor.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">condition_backdoor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_backdoor_hpp.template_class__condition_backdoor_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_backdoor</span></code></a></span></dt></dl></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">condition_backdoor</span><span class="special">;</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.condition_lockables.condition_backdoor_hpp.template_class__condition_backdoor_"></a><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_backdoor_hpp.template_class__condition_backdoor_" title="Template
+ Class condition_backdoor">Template
+ Class <code class="computeroutput"><span class="identifier">condition_backdoor</span></code></a>
+</h5></div></div></div>
+<p>
+ Condition Backdoor template. Used by safe lockers as condition_locker.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">condition_backdoor</span> <span class="special">{</span>
+ <span class="identifier">condition_backdoor</span><span class="special">(</span><span class="identifier">condition_safe</span><span class="special">&lt;</span><span class="identifier">Condition</span><span class="special">&gt;&amp;</span><span class="identifier">cnd</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">wait</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_until</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">duration_type</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_for</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">duration_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">wait_when</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">predicate_type</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_when_until</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">predicate_type</span> <span class="identifier">pred</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">predicate_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">duration_type</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_when_for</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">predicate_type</span> <span class="identifier">pred</span><span class="special">,</span> <span class="identifier">duration_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">notify_one</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">notify_all</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.condition_lockables.condition_lockable_hpp"></a><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_lockable_hpp" title="
+ Header &lt;boost/synchro/condition_lockable.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">condition_lockable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_lockable_hpp.template_class__condition_lockable_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_lockable</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">synchro</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">condition_lockable</span>
+ <span class="keyword">typedef</span> <span class="identifier">condition_lockable</span><span class="special">&lt;</span><span class="identifier">thread_mutex</span><span class="special">&gt;</span> <span class="identifier">thread_condition_mutex</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">condition_lockable</span><span class="special">&lt;</span><span class="identifier">interprocess_mutex</span><span class="special">&gt;</span> <span class="identifier">interprocess_condition_mutex</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="boost_synchro.reference.condition_lockables.condition_lockable_hpp.template_class__condition_lockable_"></a><a href="condition_lockables.html#boost_synchro.reference.condition_lockables.condition_lockable_hpp.template_class__condition_lockable_" title="Template
+ Class condition_lockable">Template
+ Class <code class="computeroutput"><span class="identifier">condition_lockable</span></code></a>
+</h5></div></div></div>
+<p>
+ Allows a condition variable to be associated with a Lockable. Treating
+ condition locking as a property of Lockable rather than viceversa has
+ the benefit of making clear how something is locked and accessed, as
+ it were emphasising it in the first person.
+ </p>
+<p>
+ Requiring the user of a condition variable to implement a while loop
+ to verify a condition's predicate is potentially error prone. It can
+ be better encapsulated by passing the predicate as a function object
+ to the locking function.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">=</span><span class="identifier">thread_mutex</span><span class="special">,</span>
+ <span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">=</span><span class="identifier">condition_safe</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">best_condition</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;</span>
+<span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">condition_lockable</span> <span class="special">{</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">Lockable</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">LockableConcept</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;));</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">Lockable</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">Condition</span> <span class="identifier">condition</span><span class="special">;</span>
+
+ <span class="identifier">condition_lockable</span><span class="special">();</span>
+ <span class="special">~</span><span class="identifier">condition_lockable</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">relock_on</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span> <span class="identifier">cond</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">relock_on_until</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span> <span class="identifier">cond</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">duration_type</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">relock_on_for</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span> <span class="identifier">cond</span><span class="special">,</span> <span class="identifier">duration_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">relock_when</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span><span class="identifier">cond</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">relock_when_until</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span><span class="identifier">cond</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">duration_type</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">relock_when_for</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span><span class="identifier">cond</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">,</span>
+ <span class="identifier">duration_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+<span class="keyword">private</span><span class="special">:</span>
+ <span class="keyword">friend</span> <span class="keyword">class</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span><span class="special">;</span>
+ <span class="keyword">friend</span> <span class="keyword">class</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span><span class="special">;</span>
+ <span class="keyword">friend</span> <span class="keyword">class</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</span><span class="special">::</span><span class="identifier">condition</span><span class="special">;</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 © 2008 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="generic_free_functions_on_multiple_lockables.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="lockers.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/generic_free_functions_on_lockable.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/generic_free_functions_on_lockable.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,1498 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Generic
+ Free Functions on Lockable</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="lockables.html" title="Lockables">
+<link rel="next" href="generic_free_functions_on_multiple_lockables.html" title="Generic
+ Free Functions on Multiple Lockables">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="lockables.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="generic_free_functions_on_multiple_lockables.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="boost_synchro.reference.generic_free_functions_on_lockable"></a><a href="generic_free_functions_on_lockable.html" title="Generic
+ Free Functions on Lockable">Generic
+ Free Functions on Lockable</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_until</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_for</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_until</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_for</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_shared</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_shared</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_shared_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_shared_for</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared_until</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared_for</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_upgrade</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_upgrade_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_upgrade_until</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade_until</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade_for</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_and_lock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_and_lock_upgrade</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_and_lock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_and_lock_shared</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_shared_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_shared</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_until</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_for</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_upgrade_and_lock_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_upgrade_and_lock_until</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_upgrade_and_lock_for_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_upgrade_and_lock_for</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_shared_and_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_shared_and_lock</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_shared_and_lock_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_shared_and_lock_hpp</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="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_shared_and_lock_upgrade_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_shared_and_lock_upgrade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.generic_free_functions_on_lockable.lock_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_hpp" title="
+ Header &lt;boost/sychro/lockable/lock.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock</span></code>
+ which locks the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">lock</span></code> member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code> could need to specialize the
+ <code class="computeroutput"><span class="identifier">lock</span></code> free function if the
+ <code class="computeroutput"><span class="identifier">Lockable</span></code> do not provides
+ a <code class="computeroutput"><span class="identifier">lock</span></code> member function
+ with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock</span></code> calls
+ to the static operation apply on a class with the same name in the namespace
+ __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lock</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lock</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">unlock</span></code> member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code> could need to specialize the
+ <code class="computeroutput"><span class="identifier">unlock</span></code> free function if
+ the <code class="computeroutput"><span class="identifier">Lockable</span></code> do not provides
+ a <code class="computeroutput"><span class="identifier">unlock</span></code> member function
+ with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unlock</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.try_lock_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_hpp" title="
+ Header &lt;boost/sychro/lockable/try_lock.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">try_lock</span></code>
+ which try to lock the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter and return false if unsucessful. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">try_lock</span></code> member
+ function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">try_lock</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">try_lock</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">try_lock</span></code>
+ member function, <code class="computeroutput"><span class="identifier">try_lock</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">try_lock</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_lock</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.try_lock_until_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_until_hpp" title="
+ Header &lt;boost/sychro/lockable/try_lock_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is reached. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ free function if the __lock_shared<span class="underline">untilable</span>_
+ do not provides a <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace unlock_upgrade_and_lock_until. So the user can specialize partially
+ this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_lock_until</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="special">}}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.generic_free_functions_on_lockable.try_lock_for_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_for_hpp" title="
+ Header &lt;boost/sychro/lockable/try_lock_for.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_for</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">try_lock_for</span></code>
+ which tries to locks the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is elapsed. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">try_lock_for</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">try_lock_for</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">try_lock_for</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">try_lock_for</span></code>
+ member function, <code class="computeroutput"><span class="identifier">try_lock_for</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_for</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_lock_for</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</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="boost_synchro.reference.generic_free_functions_on_lockable.lock_until_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_until_hpp" title="
+ Header &lt;boost/sychro/lockable/lock_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_until</span></code>
+ which lock the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is reached. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_until</span></code>
+ free function if the __lock<span class="underline">untilable</span>_
+ do not provides a <code class="computeroutput"><span class="identifier">lock_until</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_until</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_until</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="special">}}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.generic_free_functions_on_lockable.lock_for_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_for_hpp" title="
+ Header &lt;boost/sychro/lockable/lock_for.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_for</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_for</span></code>
+ which lock the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is elapsed. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_for</span></code> member
+ function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_for</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">lock_for</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_for</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_for</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lock_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_for</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_for</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</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="boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_hpp" title="
+ Header &lt;boost/sychro/lockable/lock_shared.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_shared</span></code>
+ which lock shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">lock_shared</span></code> member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code> could need to specialize the
+ <code class="computeroutput"><span class="identifier">lock_shared</span></code> free function
+ if the <code class="computeroutput"><span class="identifier">Lockable</span></code> do not
+ provides a <code class="computeroutput"><span class="identifier">lock_shared</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_shared</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_shared</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lock_shared</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_shared</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_shared</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_shared_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_shared_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_shared.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_shared</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock_shared</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">unlock_shared</span></code> member function to the
+ <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user adapting
+ another <code class="computeroutput"><span class="identifier">Lockable</span></code> could
+ need to specialize the <code class="computeroutput"><span class="identifier">unlock_shared</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">unlock_shared</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock_shared</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock_shared</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unlock_shared</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_shared</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock_shared</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.try_lock_shared_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_shared_hpp" title="
+ Header &lt;boost/sychro/lockable/try_lock_shared.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_shared</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">try_lock_shared</span></code>
+ which try to lock the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter and return false if unsucessful. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">try_lock_shared</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">try_lock_shared</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">try_lock_shared</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">try_lock_shared</span></code>
+ member function, <code class="computeroutput"><span class="identifier">try_lock_shared</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">try_lock_shared_shared</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_shared</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_lock_shared</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.try_lock_shared_for_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_shared_for_hpp" title="
+ Header &lt;boost/sychro/lockable/try_lock_shared_for.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_shared_for</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">try_lock_shared_for</span></code>
+ which tries to locks the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is elapsed. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">try_lock_shared_for</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">try_lock_shared_for</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">try_lock_shared_for</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">try_lock_shared_for</span></code>
+ member function, <code class="computeroutput"><span class="identifier">try_lock_shared_for</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_shared_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_shared_for</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_shared_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_shared_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_lock_shared_for</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</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="boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_until_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_until_hpp" title="
+ Header &lt;boost/sychro/lockable/lock_shared_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is reached. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ free function if the __lock_shared<span class="underline">untilable</span>_
+ do not provides a <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_shared_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_shared_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_shared_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_shared_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_shared_until</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="special">}}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_for_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_shared_for_hpp" title="
+ Header &lt;boost/sychro/lockable/lock_shared_for.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_shared_for</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_shared_for</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is elepsed. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_shared_for</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_shared_for</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">lock_shared_for</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_shared_for</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_shared_for</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_shared_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_shared_for</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_shared_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_shared_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_shared_for</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</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="boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_hpp" title="
+ Header &lt;boost/sychro/lockable/lock_upgrade.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_upgrade</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">lock_upgrade</span></code> member function to the
+ <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user adapting
+ another <code class="computeroutput"><span class="identifier">Lockable</span></code> could
+ need to specialize the <code class="computeroutput"><span class="identifier">lock_upgrade</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">lock_upgrade</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_upgrade</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_upgrade</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_upgrade</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_upgrade.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock_upgrade</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">unlock_upgrade</span></code> member function to the
+ <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user adapting
+ another <code class="computeroutput"><span class="identifier">Lockable</span></code> could
+ need to specialize the <code class="computeroutput"><span class="identifier">unlock_upgrade</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">unlock_upgrade</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock_upgrade</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock_upgrade</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unlock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock_upgrade</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.try_lock_upgrade_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_upgrade_hpp" title="
+ Header &lt;boost/sychro/lockable/try_lock_upgrade.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_upgrade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ which try to lock the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter and return false if unsucessful. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ member function, <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">try_lock_upgrade_shared</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_lock_upgrade</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.try_lock_upgrade_until_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_lock_upgrade_until_hpp" title="
+ Header &lt;boost/sychro/lockable/try_lock_upgrade_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_lock_upgrade_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is reached. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ free function if the __lock_shared<span class="underline">untilable</span>_
+ do not provides a <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace unlock_upgrade_and_lock_until. So the user can specialize partially
+ this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_upgrade_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_upgrade_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_upgrade_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_upgrade_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_lock_upgrade_until</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="special">}}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_until_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_until_hpp" title="
+ Header &lt;boost/sychro/lockable/lock_upgrade_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is reached. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ free function if the __lock_shared<span class="underline">untilable</span>_
+ do not provides a <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_upgrade_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_upgrade_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_upgrade_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_upgrade_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_upgrade_until</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="special">}}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_for_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.lock_upgrade_for_hpp" title="
+ Header &lt;boost/sychro/lockable/lock_upgrade_for.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">lock_upgrade_for</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_upgrade_for</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is elepsed. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_upgrade_for</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_upgrade_for</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">lock_upgrade_for</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_upgrade_for</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_upgrade_for</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_upgrade_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_upgrade_for</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_upgrade_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_upgrade_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_upgrade_for</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_and_lock_upgrade_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_and_lock_upgrade_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_and_lock_upgrade.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_and_lock_upgrade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock_and_lock_upgrade</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">unlock_and_lock_upgrade</span></code> member function
+ to the <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user
+ adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">unlock_and_lock_upgrade</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">unlock_and_lock_upgrade</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock_and_lock_upgrade</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock_and_lock_upgrade</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unlock_and_lock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_and_lock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_and_lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_and_lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock_and_lock_upgrade</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_and_lock_shared_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_and_lock_shared_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_and_lock_shared.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_and_lock_shared</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock_and_lock_shared</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">unlock_and_lock_shared</span></code> member function
+ to the <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user
+ adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">unlock_and_lock_shared</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">unlock_and_lock_shared</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock_and_lock_shared</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock_and_lock_shared</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unlock_and_lock_shared</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_and_lock_shared</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_and_lock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_and_lock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock_and_lock_shared</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_shared_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_shared_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_upgrade_and_lock_shared.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_shared</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_shared</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_shared</span></code> member
+ function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_shared</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_shared</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_shared</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_shared</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unlock_upgrade_and_lock_shared</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_upgrade_and_lock_shared</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_upgrade_and_lock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_upgrade_and_lock_shared</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock_upgrade_and_lock_shared</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_upgrade_and_lock.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock</span></code> member function
+ to the <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user
+ adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unlock_upgrade_and_lock</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_upgrade_and_lock</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_upgrade_and_lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_upgrade_and_lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock_upgrade_and_lock</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_until_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_until_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_upgrade_and_lock_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is reached. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ free function if the __lock_shared<span class="underline">untilable</span>_
+ do not provides a <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace unlock_upgrade_and_lock_until. So the user can specialize partially
+ this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_upgrade_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">lock_upgrade_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_upgrade_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">lock_upgrade_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">lock_upgrade_until</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="special">}}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_for_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_upgrade_and_lock_for_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_upgrade_and_lock_for.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_upgrade_and_lock_for</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_for</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is elepsed. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_for</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_for</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_for</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_for</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock_upgrade_and_lock_for</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_upgrade_and_lock_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_upgrade_and_lock_for</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_upgrade_and_lock_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_upgrade_and_lock_for</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock_upgrade_and_lock_for</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</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="boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_upgrade_and_lock_until_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_upgrade_and_lock_until_hpp" title="
+ Header &lt;boost/sychro/lockable/try_unlock_upgrade_and_lock_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_upgrade_and_lock_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ which locks shared the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is reached. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ free function if the __lock_shared<span class="underline">untilable</span>_
+ do not provides a <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">lock_shared_until</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace unlock_upgrade_and_lock_until. So the user can specialize partially
+ this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_unlock_upgrade_and_lock_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_unlock_upgrade_and_lock_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_unlock_upgrade_and_lock_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_unlock_upgrade_and_lock_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Clock</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_unlock_upgrade_and_lock_until</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="special">}}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_upgrade_and_lock_for_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_upgrade_and_lock_for_hpp" title="
+ Header &lt;boost/sychro/lockable/try_unlock_upgrade_and_lock_for.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_upgrade_and_lock_for</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">try_unlock_upgrade_and_lock_until</span></code>
+ which tries to locks the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter until a given time is elapsed. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">try_unlock_upgrade_and_lock_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">try_unlock_upgrade_and_lock_until</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">try_unlock_upgrade_and_lock_until</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">try_unlock_upgrade_and_lock_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">try_unlock_upgrade_and_lock_until</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_unlock_upgrade_and_lock_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_unlock_upgrade_and_lock_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_unlock_upgrade_and_lock_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">rel_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_unlock_upgrade_and_lock_until</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span><span class="identifier">Rep</span><span class="special">,</span><span class="identifier">Period</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_unlock_upgrade_and_lock_until</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">&gt;&amp;</span> <span class="identifier">abs_time</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="boost_synchro.reference.generic_free_functions_on_lockable.unlock_shared_and_lock_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.unlock_shared_and_lock_hpp" title="
+ Header &lt;boost/sychro/lockable/unlock_shared_and_lock.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">unlock_shared_and_lock</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">unlock_shared_and_lock</span></code>
+ which lock upgrade the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">unlock_shared_and_lock</span></code> member function
+ to the <code class="computeroutput"><span class="identifier">Lockable</span></code>. A user
+ adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">unlock_shared_and_lock</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">unlock_shared_and_lock</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">unlock_shared_and_lock</span></code>
+ member function, <code class="computeroutput"><span class="identifier">unlock_shared_and_lock</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unlock_shared_and_lock</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">unlock_shared_and_lock</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_shared_and_lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">unlock_shared_and_lock</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">unlock_shared_and_lock</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_shared_and_lock_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_shared_and_lock_hpp" title="
+ Header &lt;boost/sychro/lockable/try_unlock_shared_and_lock_hpp.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_shared_and_lock_hpp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ which try to lock the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter and return false if unsucessful. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ member function, <code class="computeroutput"><span class="identifier">try_lock_upgrade</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">try_unlock_shared_and_lock</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_lock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_lock_upgrade</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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="boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_shared_and_lock_upgrade_hpp"></a><a href="generic_free_functions_on_lockable.html#boost_synchro.reference.generic_free_functions_on_lockable.try_unlock_shared_and_lock_upgrade_hpp" title="
+ Header &lt;boost/sychro/lockable/try_unlock_shared_and_lock_upgrade.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">sychro</span><span class="special">/</span><span class="identifier">lockable</span><span class="special">/</span><span class="identifier">try_unlock_shared_and_lock_upgrade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">try_unlock_shared_and_lock_upgrade</span></code>
+ which try to lock the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ passed as parameter and return false if unsucessful. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">try_unlock_shared_and_lock_upgrade</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">try_unlock_shared_and_lock_upgrade</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">Lockable</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">try_unlock_shared_and_lock_upgrade</span></code>
+ member function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick is
+ used: instead of calling directly to the <code class="computeroutput"><span class="identifier">try_unlock_shared_and_lock_upgrade</span></code>
+ member function, <code class="computeroutput"><span class="identifier">try_unlock_shared_and_lock_upgrade</span></code>
+ calls to the static operation apply on a class with the same name in the
+ namespace __partial_specialization<span class="underline">workaround</span>_.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">lockable</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">try_unlock_shared_and_lock_upgrade_shared</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Lockable</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">try_unlock_shared_and_lock_upgrade</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_unlock_shared_and_lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">try_unlock_shared_and_lock_upgrade</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">try_unlock_shared_and_lock_upgrade</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">lockable</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 © 2008 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="lockables.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="generic_free_functions_on_multiple_lockables.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/generic_free_functions_on_multiple_lockables.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/generic_free_functions_on_multiple_lockables.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,46 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Generic
+ Free Functions on Multiple Lockables</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="generic_free_functions_on_lockable.html" title="Generic
+ Free Functions on Lockable">
+<link rel="next" href="condition_lockables.html" title="Condition
+ Lockables">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="generic_free_functions_on_lockable.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="condition_lockables.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="boost_synchro.reference.generic_free_functions_on_multiple_lockables"></a><a href="generic_free_functions_on_multiple_lockables.html" title="Generic
+ Free Functions on Multiple Lockables">Generic
+ Free Functions on Multiple Lockables</a>
+</h3></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 © 2008 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="generic_free_functions_on_lockable.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="condition_lockables.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/high_level.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/high_level.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,160 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>High Level</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="other.html" title="Other">
+<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="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="other.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="boost_synchro.reference.high_level"></a>High Level
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">monitor</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="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__exclusive_monitor___">Template
+ Class <code class="computeroutput"><span class="identifier">exclusive_monitor</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__shared_monitor___">Template
+ Class <code class="computeroutput"><span class="identifier">shared_monitor</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__monitor___">Template
+ Class <code class="computeroutput"><span class="identifier">monitor</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></dd>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.high_level.monitor_hpp"></a><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp" title=" Header
+ &lt;boost/synchro/monitor.hpp&gt;"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">monitor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__exclusive_monitor___">Template
+ Class <code class="computeroutput"><span class="identifier">exclusive_monitor</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__shared_monitor___">Template
+ Class <code class="computeroutput"><span class="identifier">shared_monitor</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__monitor___">Template
+ Class <code class="computeroutput"><span class="identifier">monitor</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">synchro</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">=</span><span class="identifier">thread_mutex</span>
+ <span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">=</span><span class="identifier">condition_safe</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">best_condition</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">scope_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">exclusive_monitor</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">=</span><span class="identifier">thread_shared_mutex</span><span class="special">,</span>
+ <span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">=</span><span class="identifier">condition_safe</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">best_condition_any</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">scope_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">class</span> <span class="identifier">shared_monitor</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">=</span><span class="identifier">thread_mutex</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">lock_tag</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">category_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">scope_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">monitor</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="boost_synchro.reference.high_level.monitor_hpp.template_class__exclusive_monitor___"></a><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__exclusive_monitor___" title="Template
+ Class exclusive_monitor&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">exclusive_monitor</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">Lockable</span><span class="special">=</span><span class="identifier">thread_mutex</span>
+<span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">=</span><span class="identifier">condition_safe</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">best_condition</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;</span>
+<span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">scope_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">exclusive_monitor</span> <span class="special">:</span> <span class="keyword">protected</span> <span class="identifier">lockable_adapter</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">LockableConcept</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;));</span>
+<span class="keyword">protected</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">Condition</span> <span class="identifier">condition</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">condition_unique_locker</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">Condition</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span> <span class="identifier">synchronizer</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.high_level.monitor_hpp.template_class__shared_monitor___"></a><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__shared_monitor___" title="Template
+ Class shared_monitor&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">shared_monitor</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">Lockable</span><span class="special">=</span><span class="identifier">thread_shared_mutex</span><span class="special">,</span>
+<span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">=</span><span class="identifier">condition_safe</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">best_condition_any</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;</span>
+<span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">scope_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">shared_monitor</span> <span class="special">:</span> <span class="keyword">protected</span> <span class="identifier">lockable_adapter</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">LockableConcept</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;));</span>
+<span class="keyword">protected</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">Condition</span> <span class="identifier">condition</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">condition_unique_locker</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">Condition</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span> <span class="identifier">synchronizer</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">condition_shared_locker</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">Condition</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span> <span class="identifier">shared_synchronizer</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.high_level.monitor_hpp.template_class__monitor___"></a><a href="high_level.html#boost_synchro.reference.high_level.monitor_hpp.template_class__monitor___" title="Template
+ Class monitor&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">monitor</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">Lockable</span><span class="special">=</span><span class="identifier">thread_mutex</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">lock_tag</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">category_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">scope_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">monitor</span><span class="special">;</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">monitor</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">exclusive_lock_tag</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span>
+ <span class="special">:</span> <span class="keyword">protected</span> <span class="identifier">exclusive_monitor</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span>
+<span class="special">{};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">monitor</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">sharable_lock_tag</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span>
+ <span class="special">:</span> <span class="keyword">protected</span> <span class="identifier">shared_monitor</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span>
+<span class="special">{};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">monitor</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">upgradable_lock_tag</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</span>
+ <span class="special">:</span> <span class="keyword">protected</span> <span class="identifier">shared_monitor</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">,</span> <span class="identifier">ScopeTag</span><span class="special">&gt;</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 © 2008 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="other.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/synchro/libs/synchro/doc/html/boost_synchro/reference/lockables.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/lockables.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,1188 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Lockables</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="../reference.html" title="Reference">
+<link rel="next" href="generic_free_functions_on_lockable.html" title="Generic
+ Free Functions on Lockable">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="generic_free_functions_on_lockable.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="boost_synchro.reference.lockables"></a>Lockables
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_traits</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="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.template_class__has_timed_interface_">Template
+ Class <code class="computeroutput"><span class="identifier">has_timed_interface</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_exclusive_">Class
+ <code class="computeroutput"><span class="identifier">is_exclusive</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_shared_">Class
+ <code class="computeroutput"><span class="identifier">is_shared</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_recursive_">Class
+ <code class="computeroutput"><span class="identifier">is_recursive</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_mono_threaded_">Class
+ <code class="computeroutput"><span class="identifier">is_mono_threaded</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_multi_threaded_">Class
+ <code class="computeroutput"><span class="identifier">is_multi_threaded</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_multi_process_">Class
+ <code class="computeroutput"><span class="identifier">is_multi_process</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__mutex_type_">Class
+ <code class="computeroutput"><span class="identifier">mutex_type</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__scoped_lock_">Class
+ <code class="computeroutput"><span class="identifier">scoped_lock</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__unique_lock_">Class
+ <code class="computeroutput"><span class="identifier">unique_lock</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__shared_lock_">Class
+ <code class="computeroutput"><span class="identifier">shared_lock</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__upgrade_lock_">Class
+ <code class="computeroutput"><span class="identifier">upgrade_lock</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error_">Class
+ <code class="computeroutput"><span class="identifier">lock_error</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__moved_object_">Class
+ <code class="computeroutput"><span class="identifier">moved_object</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error2_">Class
+ <code class="computeroutput"><span class="identifier">lock_error2</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error3_">Class
+ <code class="computeroutput"><span class="identifier">lock_error3</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error4_">Class
+ <code class="computeroutput"><span class="identifier">lock_error4</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_traits_">Class
+ <code class="computeroutput"><span class="identifier">lock_traits</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_concepts</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="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__lockableconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">LockableConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__timedlockableconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">TimedLockableConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__sharelockableconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">ShareLockableConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__upgradelockableconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">UpgradeLockableConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lock_generator_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lock_generator</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="lockables.html#boost_synchro.reference.lockables.lock_generator_hpp.metafunction__default_lifetime___">Metafunction
+ <code class="computeroutput"><span class="identifier">default_lifetime</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lock_generator_hpp.metafunction__find_best_lock___">Metafunction
+ <code class="computeroutput"><span class="identifier">find_best_lock</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_adapter</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="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__exclusive_lockable_adapter___">Template
+ Class <code class="computeroutput"><span class="identifier">exclusive_lockable_adapter</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__timed_lockable_adapter___">Template
+ Class <code class="computeroutput"><span class="identifier">timed_lockable_adapter</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__shared_lockable_adapter___">Template
+ Class <code class="computeroutput"><span class="identifier">shared_lockable_adapter</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__upgrade_lockable_adapter___">Template
+ Class <code class="computeroutput"><span class="identifier">upgrade_lockable_adapter</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></dd>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp" title="
+ Header &lt;boost/synchro/lockable_traits.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.template_class__has_timed_interface_">Template
+ Class <code class="computeroutput"><span class="identifier">has_timed_interface</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_exclusive_">Class
+ <code class="computeroutput"><span class="identifier">is_exclusive</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_shared_">Class
+ <code class="computeroutput"><span class="identifier">is_shared</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_recursive_">Class
+ <code class="computeroutput"><span class="identifier">is_recursive</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_mono_threaded_">Class
+ <code class="computeroutput"><span class="identifier">is_mono_threaded</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_multi_threaded_">Class
+ <code class="computeroutput"><span class="identifier">is_multi_threaded</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_multi_process_">Class
+ <code class="computeroutput"><span class="identifier">is_multi_process</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__mutex_type_">Class
+ <code class="computeroutput"><span class="identifier">mutex_type</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__scoped_lock_">Class
+ <code class="computeroutput"><span class="identifier">scoped_lock</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__unique_lock_">Class
+ <code class="computeroutput"><span class="identifier">unique_lock</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__shared_lock_">Class
+ <code class="computeroutput"><span class="identifier">shared_lock</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__upgrade_lock_">Class
+ <code class="computeroutput"><span class="identifier">upgrade_lock</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error_">Class
+ <code class="computeroutput"><span class="identifier">lock_error</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__moved_object_">Class
+ <code class="computeroutput"><span class="identifier">moved_object</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error2_">Class
+ <code class="computeroutput"><span class="identifier">lock_error2</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error3_">Class
+ <code class="computeroutput"><span class="identifier">lock_error3</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error4_">Class
+ <code class="computeroutput"><span class="identifier">lock_error4</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_traits_">Class
+ <code class="computeroutput"><span class="identifier">lock_traits</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">synchro</span> <span class="special">{</span>
+
+ <span class="keyword">struct</span> <span class="identifier">mono_threaded_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">multi_threaded_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">multi_process_tag</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">scope_tag</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_mono_threaded</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_multi_threaded</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_multi_process</span><span class="special">;</span>
+
+ <span class="keyword">struct</span> <span class="identifier">process_lifetime_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">kernel_lifetime_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">filesystem_lifetime_tag</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lifetime_tag</span><span class="special">;</span>
+
+ <span class="keyword">struct</span> <span class="identifier">anonymous_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">named_tag</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">naming_tag</span><span class="special">;</span>
+
+ <span class="keyword">struct</span> <span class="identifier">exclusive_lock_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">sharable_lock_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">upgradable_lock_tag</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">category_tag</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_exclusive_lock</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_sharable_lock</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_upgradable_lock</span><span class="special">;</span>
+
+ <span class="keyword">struct</span> <span class="identifier">non_recursive_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">recursive_tag</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">reentrancy_tag</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_recursive_lock</span><span class="special">;</span>
+
+ <span class="keyword">struct</span> <span class="identifier">hasnt_timed_interface_tag</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_timed_interface_tag</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">timed_interface_tag</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">has_timed_interface</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">best_condition</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">best_condition_any</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">scoped_lock_type</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">unique_lock_type</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">shared_lock_type</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">upgrade_lock_type</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lock_error_type</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">move_object_type</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">defer_lock_type</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">adopt_lock_type</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">try_to_lock_type</span><span class="special">;</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Scope</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">default_lifetime</span><span class="special">;</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">Scope</span><span class="special">=</span><span class="identifier">multi_threaded_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Cathegory</span><span class="special">=</span><span class="identifier">exclusive_lock_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Reentrancy</span><span class="special">=</span><span class="identifier">non_recursive_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">TimedInterface</span><span class="special">=</span><span class="identifier">has_timed_interface_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Lifetime</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">default_lifetime</span><span class="special">&lt;</span><span class="identifier">Scope</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">Naming</span><span class="special">=</span><span class="identifier">anonymous_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">=</span><span class="keyword">void</span>
+ <span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lock_traits_base</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="boost_synchro.reference.lockables.lockable_traits_hpp.template_class__has_timed_interface_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.template_class__has_timed_interface_" title="Template
+ Class has_timed_interface">Template
+ Class <code class="computeroutput"><span class="identifier">has_timed_interface</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">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">has_timed_interface</span>
+ <span class="special">:</span> <span class="identifier">is_same_or_is_base_and_derived</span><span class="special">&lt;</span>
+ <span class="identifier">has_timed_interface_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">timed_interface_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;</span>
+<span class="special">{};</span>
+</pre>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__is_exclusive_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_exclusive_" title="Class
+ is_exclusive">Class
+ <code class="computeroutput"><span class="identifier">is_exclusive</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__is_shared_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_shared_" title="Class
+ is_shared">Class
+ <code class="computeroutput"><span class="identifier">is_shared</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__is_recursive_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_recursive_" title="Class
+ is_recursive">Class
+ <code class="computeroutput"><span class="identifier">is_recursive</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__is_mono_threaded_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_mono_threaded_" title="Class
+ is_mono_threaded">Class
+ <code class="computeroutput"><span class="identifier">is_mono_threaded</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__is_multi_threaded_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_multi_threaded_" title="Class
+ is_multi_threaded">Class
+ <code class="computeroutput"><span class="identifier">is_multi_threaded</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__is_multi_process_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__is_multi_process_" title="Class
+ is_multi_process">Class
+ <code class="computeroutput"><span class="identifier">is_multi_process</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__mutex_type_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__mutex_type_" title="Class
+ mutex_type">Class
+ <code class="computeroutput"><span class="identifier">mutex_type</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__scoped_lock_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__scoped_lock_" title="Class
+ scoped_lock">Class
+ <code class="computeroutput"><span class="identifier">scoped_lock</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__unique_lock_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__unique_lock_" title="Class
+ unique_lock">Class
+ <code class="computeroutput"><span class="identifier">unique_lock</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__shared_lock_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__shared_lock_" title="Class
+ shared_lock">Class
+ <code class="computeroutput"><span class="identifier">shared_lock</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__upgrade_lock_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__upgrade_lock_" title="Class
+ upgrade_lock">Class
+ <code class="computeroutput"><span class="identifier">upgrade_lock</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error_" title="Class
+ lock_error">Class
+ <code class="computeroutput"><span class="identifier">lock_error</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__moved_object_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__moved_object_" title="Class
+ moved_object">Class
+ <code class="computeroutput"><span class="identifier">moved_object</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error2_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error2_" title="Class
+ lock_error2">Class
+ <code class="computeroutput"><span class="identifier">lock_error2</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error3_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error3_" title="Class
+ lock_error3">Class
+ <code class="computeroutput"><span class="identifier">lock_error3</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error4_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_error4_" title="Class
+ lock_error4">Class
+ <code class="computeroutput"><span class="identifier">lock_error4</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span> <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_traits_"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_traits_hpp.class__lock_traits_" title="Class
+ lock_traits">Class
+ <code class="computeroutput"><span class="identifier">lock_traits</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span>
+ </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">lock_traits</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">Lockable</span> <span class="identifier">mutex_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">scoped_lock</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">unique_lock</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">shared_lock</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">upgrade_lock</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">lock_error</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">moved_object</span><span class="special">;</span>
+ <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">unspecified</span> <span class="identifier">defer_lock</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">unspecified</span> <span class="identifier">adopt_lock</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">unspecified</span> <span class="identifier">try_to_lock</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+<p>
+ <span class="bold"><strong>Description</strong></span> Lock Traits characterise
+ lockable types.
+ </p>
+<p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">nested_strict_locker</span></code>
+ public member types</strong></span>
+ </p>
+<div class="orderedlist"><ol type="1"><li><code class="computeroutput"><span class="special">;</span></code></li></ol></div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockables.lockable_concept_hpp"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp" title="
+ Header &lt;boost/synchro/lockable_concepts.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_concepts</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__lockableconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">LockableConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__timedlockableconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">TimedLockableConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__sharelockableconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">ShareLockableConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__upgradelockableconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">UpgradeLockableConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></div>
+<p>
+ Lockable concepts.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">LockableConcept</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">TimedLockableConcept</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">ShareLockableConcept</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">UpgradeLockableConcept</span><span class="special">;</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_concept_hpp.template_class__lockableconcept___"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__lockableconcept___" title="Template
+ Class LockableConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">LockableConcept</span><span class="special">&lt;&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ The boost::mutex and boost:interprocess mutex family classes are a non-polymorphic
+ classes that encapsulates a system primitive and portion of C API. Clearly,
+ many of the synchronisation primitives support common operations, and
+ hence a Concept. The ExclusiveLockable class can be used with the Boost.ConceptCheck
+ in templates that work with a exclusive synchronisation.
+ </p>
+<p>
+ LockableConcept object supports the basic features required to delimit
+ a critical region. Supports the basic lock, unlock and try_lock functions
+ and defines the lock traits
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">LockableConcept</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">category_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">category</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">timed_interface_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">timed_interface</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">reentrancy_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">reentrancy</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">scope_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">scope</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lifetime_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">lifetime</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">naming_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">naming</span><span class="special">;</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">LockableConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">lock</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">unlock</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">try_lock</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">l</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_concept_hpp.template_class__timedlockableconcept___"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__timedlockableconcept___" title="Template
+ Class TimedLockableConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">TimedLockableConcept</span><span class="special">&lt;&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ TimedLockableConcept object extends ExclusiveLockConcept with the timed_lock
+ function
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">TimedLockableConcept</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">LockableConcept</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;));</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">TimedLockableConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">lock_until</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">lock_for</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">1</span><span class="special">));</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">try_lock_until</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">try_lock_for</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">1</span><span class="special">));</span>
+ <span class="special">}</span>
+ <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">l</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">system_clock</span><span class="special">::</span><span class="identifier">time_point</span> <span class="identifier">t</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_concept_hpp.template_class__sharelockableconcept___"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__sharelockableconcept___" title="Template
+ Class ShareLockableConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">ShareLockableConcept</span><span class="special">&lt;&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ ShareLockableConcept object extends ExclusiveTimedLockConcept with the
+ lock_shared, timed_lock_shared, try_lock_shared and unlock_shared functions
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">ShareLockableConcept</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">TimedLockableConcept</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;));</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">ShareLockableConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">lock_shared</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">lock_shared_until</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">lock_shared_for</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">1</span><span class="special">));</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">try_lock_shared</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">try_lock_shared_until</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">try_lock_shared_for</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">1</span><span class="special">));</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">unlock_shared</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">l</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">system_clock</span><span class="special">::</span><span class="identifier">time_point</span> <span class="identifier">t</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_concept_hpp.template_class__upgradelockableconcept___"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_concept_hpp.template_class__upgradelockableconcept___" title="Template
+ Class UpgradeLockableConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">UpgradeLockableConcept</span><span class="special">&lt;&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ UpgradeLockableConcept object extends SharableLockableConcept with the
+ lock_upgrade, timed_lock_upgrade, unlock_upgrade_and_lock, unlock_and_lock_shared
+ and unlock_upgrade_and_lock_shared functions.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">UpgradeLockableConcept</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">ShareLockableConcept</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;));</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">UpgradeLockableConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">lock_upgrade</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="comment">//lockable::lock_upgrade_until(l, t);
+</span> <span class="comment">//lockable::lock_upgrade_for(l, boost::chrono::seconds(1));
+</span> <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">try_lock_upgrade</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="comment">//lockable::try_lock_upgrade_until(l, t);
+</span> <span class="comment">//lockable::try_lock_upgrade_for(l,boost::chrono::seconds(1));
+</span> <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">unlock_upgrade_and_lock</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">unlock_and_lock_upgrade</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">unlock_and_lock_shared</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">lockable</span><span class="special">::</span><span class="identifier">unlock_upgrade_and_lock_shared</span><span class="special">(</span><span class="identifier">l</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">l</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">system_clock</span><span class="special">::</span><span class="identifier">time_point</span> <span class="identifier">t</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockables.lock_generator_hpp"></a><a href="lockables.html#boost_synchro.reference.lockables.lock_generator_hpp" title="
+ Header &lt;boost/synchro/lock_generator.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lock_generator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lock_generator_hpp.metafunction__default_lifetime___">Metafunction
+ <code class="computeroutput"><span class="identifier">default_lifetime</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lock_generator_hpp.metafunction__find_best_lock___">Metafunction
+ <code class="computeroutput"><span class="identifier">find_best_lock</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">synchro</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Scope</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">default_lifetime</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">see_below</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="keyword">template</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">Scope</span><span class="special">=</span><span class="identifier">multi_threaded_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Category</span><span class="special">=</span><span class="identifier">exclusive_lock_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Reentrancy</span><span class="special">=</span><span class="identifier">non_recursive_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">TimedInterface</span><span class="special">=</span><span class="identifier">has_timed_interface_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Lifetime</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">default_lifetime</span><span class="special">&lt;</span><span class="identifier">Scope</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">Naming</span><span class="special">=</span><span class="identifier">anonymous_tag</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">find_best_lock</span><span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">see_below</span> <span class="identifier">type</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="boost_synchro.reference.lockables.lock_generator_hpp.metafunction__default_lifetime___"></a><a href="lockables.html#boost_synchro.reference.lockables.lock_generator_hpp.metafunction__default_lifetime___" title="Metafunction
+ default_lifetime&lt;&gt;">Metafunction
+ <code class="computeroutput"><span class="identifier">default_lifetime</span><span class="special">&lt;&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Metafunction that returns the default lifetime depending on the Scope.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Scope</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">default_lifetime</span><span class="special">;</span>
+<span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">default_lifetime</span><span class="special">&lt;</span><span class="identifier">multi_threaded_tag</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">process_lifetime_tag</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+<span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">default_lifetime</span><span class="special">&lt;</span><span class="identifier">multi_process_tag</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">kernel_lifetime_tag</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ default_lifetime&lt;Scope&gt;::type
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ A lifetime tag.
+ </p></dd>
+<dt><span class="term">Complexity:</span></dt>
+<dd><p>
+ constant.
+ </p></dd>
+</dl>
+</div>
+<div class="table">
+<a name="id4854904"></a><p class="title"><b>Table 1.1. default_lifetime relationship</b></p>
+<table class="table" summary="default_lifetime relationship">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">Scope</span></code></strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">default_lifetime</span><span class="special">&lt;</span><span class="identifier">Scope</span><span class="special">&gt;::</span><span class="identifier">type</span></code></strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_threaded_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">process_lifetime_tag</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_process_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">kernel_lifetime_tag</span></code>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lock_generator_hpp.metafunction__find_best_lock___"></a><a href="lockables.html#boost_synchro.reference.lockables.lock_generator_hpp.metafunction__find_best_lock___" title="Metafunction
+ find_best_lock&lt;&gt;">Metafunction
+ <code class="computeroutput"><span class="identifier">find_best_lock</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">Scope</span><span class="special">=</span><span class="identifier">multi_threaded_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Category</span><span class="special">=</span><span class="identifier">exclusive_lock_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Reentrancy</span><span class="special">=</span><span class="identifier">non_recursive_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">TimedInterface</span><span class="special">=</span><span class="identifier">has_timed_interface_tag</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Lifetime</span><span class="special">=</span><span class="keyword">typename</span> <span class="identifier">default_lifetime</span><span class="special">&lt;</span><span class="identifier">Scope</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">Naming</span><span class="special">=</span><span class="identifier">anonymous_tag</span>
+<span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">find_best_lock</span><span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">see_below</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ find_best_lock&lt;...&gt;::type
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ A model of <code class="computeroutput"><span class="identifier">Lockable</span></code>.
+ </p></dd>
+<dt><span class="term">Complexity:</span></dt>
+<dd><p>
+ constant.
+ </p></dd>
+</dl>
+</div>
+<p>
+ The library defines already the following matchings:
+ </p>
+<div class="table">
+<a name="id4855382"></a><p class="title"><b>Table 1.2. find_best_lock relationship</b></p>
+<table class="table" summary="find_best_lock relationship">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">Scope</span></code></strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">Category</span></code></strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">Reentrancy</span></code></strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">TimedInterface</span></code></strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">Lifetime</span></code></strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">Naming</span></code></strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">find_best_lock</span><span class="special">&lt;...&gt;::</span><span class="identifier">type</span></code></strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_threaded_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">exclusive_lock_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">non_recursive_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">hasnt_timed_interface_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">process_lifetime_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">anonymous_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">synchro</span><span class="special">::</span><span class="identifier">thread_mutex</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_threaded_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">exclusive_lock_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">recursive_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">hasnt_timed_interface_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">process_lifetime_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">anonymous_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">synchro</span><span class="special">::</span><span class="identifier">thread_recursive_mutex</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_threaded_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">exclusive_lock_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">non_recursive_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">has_timed_interface_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">process_lifetime_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">anonymous_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">synchro</span><span class="special">::</span><span class="identifier">thread_timed_mutex</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_threaded_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="special">*</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">non_recursive_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="special">*</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">process_lifetime_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">anonymous_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">synchro</span><span class="special">::</span><span class="identifier">thread_shared_mutex</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_process_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">exclusive_lock_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">non_recursive_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="special">*</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">kernel_lifetime_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">anonymous_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">synchro</span><span class="special">::</span><span class="identifier">interprocess_mutex</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_process_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">exclusive_lock_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">recursive_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="special">*</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">kernel_lifetime_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">anonymous_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">synchro</span><span class="special">::</span><span class="identifier">interprocess_recursive_mutex</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">multi_process_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="special">*</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">non_recursive_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="special">*</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">process_lifetime_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">anonymous_tag</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">synchro</span><span class="special">::</span><span class="identifier">interprocess_upgradable_mutex</span></code>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockables.lockable_adapter_hpp"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp" title="
+ Header &lt;boost/synchro/lockable_adapter.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">lockable_adapter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__exclusive_lockable_adapter___">Template
+ Class <code class="computeroutput"><span class="identifier">exclusive_lockable_adapter</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__timed_lockable_adapter___">Template
+ Class <code class="computeroutput"><span class="identifier">timed_lockable_adapter</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__shared_lockable_adapter___">Template
+ Class <code class="computeroutput"><span class="identifier">shared_lockable_adapter</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__upgrade_lockable_adapter___">Template
+ Class <code class="computeroutput"><span class="identifier">upgrade_lockable_adapter</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">synchro</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">exclusive_lockable_adapter</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimedLock</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">timed_lockable_adapter</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">SharableLock</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">shared_lockable_adapter</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">UpgradableLock</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">upgrade_lockable_adapter</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">category</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">timed_interface</span>
+ <span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">lockable_adapter</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="boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__exclusive_lockable_adapter___"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__exclusive_lockable_adapter___" title="Template
+ Class exclusive_lockable_adapter&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">exclusive_lockable_adapter</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">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">exclusive_lockable_adapter</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">BOOST_COPY_CONSTRUCTOR_DELETE</span><span class="special">(</span><span class="identifier">exclusive_lockable_adapter</span><span class="special">)</span>
+ <span class="identifier">BOOST_COPY_ASSIGNEMENT_DELETE</span><span class="special">(</span><span class="identifier">exclusive_lockable_adapter</span><span class="special">)</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">Lockable</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">scope_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">scope</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">category_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">category</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">reentrancy_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">reentrancy</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">timed_interface_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">timed_interface</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lifetime_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">lifetime</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">naming_tag</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">naming</span><span class="special">;</span>
+
+ <span class="identifier">exclusive_lockable_adapter</span><span class="special">()</span> <span class="special">{}</span>
+ <span class="keyword">void</span> <span class="identifier">lock</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">unlock</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">try_lock</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__timed_lockable_adapter___"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__timed_lockable_adapter___" title="Template
+ Class timed_lockable_adapter&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">timed_lockable_adapter</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">TimedLock</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">timed_lockable_adapter</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">exclusive_lockable_adapter</span><span class="special">&lt;</span><span class="identifier">TimedLock</span><span class="special">&gt;</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">timed_lockable_adapter</span><span class="special">()</span> <span class="special">{}</span>
+
+ <span class="keyword">bool</span> <span class="identifier">try_lock_until</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">try_lock_for</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">relative_time</span><span class="special">);</span>
+
+ <span class="keyword">void</span> <span class="identifier">lock_until</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">lock_for</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">relative_time</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__shared_lockable_adapter___"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__shared_lockable_adapter___" title="Template
+ Class shared_lockable_adapter&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">shared_lockable_adapter</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">SharableLock</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">shared_lockable_adapter</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">timed_lockable_adapter</span><span class="special">&lt;</span><span class="identifier">SharableLock</span><span class="special">&gt;</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">shared_lockable_adapter</span><span class="special">()</span> <span class="special">{}</span>
+ <span class="keyword">void</span> <span class="identifier">lock_shared</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">try_lock_shared</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">unlock_shared</span><span class="special">();</span>
+
+ <span class="keyword">bool</span> <span class="identifier">try_lock_shared_until</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">try_lock_shared_for</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">lock_shared_for</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">lock_shared_until</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__upgrade_lockable_adapter___"></a><a href="lockables.html#boost_synchro.reference.lockables.lockable_adapter_hpp.template_class__upgrade_lockable_adapter___" title="Template
+ Class upgrade_lockable_adapter&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">upgrade_lockable_adapter</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">UpgradableLock</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">upgrade_lockable_adapter</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">shared_lockable_adapter</span><span class="special">&lt;</span><span class="identifier">UpgradableLock</span><span class="special">&gt;{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">upgrade_lockable_adapter</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">lock_upgrade</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">try_lock_upgrade</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">unlock_upgrade</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">unlock_upgrade_and_lock</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">unlock_and_lock_upgrade</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">unlock_and_lock_shared</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">unlock_upgrade_and_lock_shared</span><span class="special">();</span>
+
+ <span class="keyword">bool</span> <span class="identifier">try_lock_upgrade_until</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span><span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">try_lock_upgrade_for</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&amp;</span><span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">lock_upgrade_until</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span><span class="identifier">t</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">lock_upgrade_for</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&amp;</span><span class="identifier">t</span><span class="special">);</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 © 2008 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="generic_free_functions_on_lockable.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/lockers.html
==============================================================================
--- (empty file)
+++ sandbox/synchro/libs/synchro/doc/html/boost_synchro/reference/lockers.html 2009-10-12 17:49:35 EDT (Mon, 12 Oct 2009)
@@ -0,0 +1,1129 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Lockers</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Chapter 1. Boost.Synchro">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="condition_lockables.html" title="Condition
+ Lockables">
+<link rel="next" href="single_threaded.html" title="Single-threaded">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></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="condition_lockables.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="single_threaded.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="boost_synchro.reference.lockers"></a>Lockers
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker_concepts</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="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__basiclockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">BasicLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__lockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">LockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__timedlockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">TimedLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__uniquelockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">UniqueLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__sharedlockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">SharedLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__upgradelockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">UpgradeLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__movablelockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">MovableLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.is_strict_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">is_strict_locker</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="lockers.html#boost_synchro.reference.lockers.is_strict_locker_hpp.metafunction__is_strict_locker_">Metafunction
+ <code class="computeroutput"><span class="identifier">is_strict_locker</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">strict_locker</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="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.class__strict_locker_">Class
+ <code class="computeroutput"><span class="identifier">strict_locker</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.class__nested_strict_locker_">Class
+ <code class="computeroutput"><span class="identifier">nested_strict_locker</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.template_class__nested_strict_locker_">Template
+ Class <code class="computeroutput"><span class="identifier">nested_strict_locker</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.reverse_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">reverse_locker</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="lockers.html#boost_synchro.reference.lockers.reverse_locker_hpp.class__reverse_lock_">Class
+ <code class="computeroutput"><span class="identifier">reverse_lock</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.nested_reverse_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">nested_reverse_locker</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="lockers.html#boost_synchro.reference.lockers.nested_reverse_locker_hpp.class__nested_reverse_locker_">Class
+ <code class="computeroutput"><span class="identifier">nested_reverse_locker</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">condition_locker</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="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_backdoor_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_backdoor</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_safe_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_safe</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_unique_locker_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_unique_locker</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.externally_locked_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">externally_locked</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="lockers.html#boost_synchro.reference.lockers.externally_locked_hpp.template_class__externally_locked_">Template
+ Class <code class="computeroutput"><span class="identifier">externally_locked</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locking_ptr_hpp"> Header
+ <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">locking_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locking_ptr_hpp.class__locking_ptr_">Class
+ <code class="computeroutput"><span class="identifier">locking_ptr</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locking_ptr_hpp.class__sharable_locking_ptr_">Class
+ <code class="computeroutput"><span class="identifier">sharable_locking_ptr</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.on_derreference_locking_ptr_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">on_derreference_locking_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl><dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.on_derreference_locking_ptr_hpp.class__on_derreference_locking_ptr_">Class
+ <code class="computeroutput"><span class="identifier">on_derreference_locking_ptr</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.array_unique_locker_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">array_unique_locker</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="lockers.html#boost_synchro.reference.lockers.array_unique_locker_hpp.template_class__unique_array_locker___">Template
+ Class <code class="computeroutput"><span class="identifier">unique_array_locker</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.array_unique_locker_hpp.template_class__try_unique_array_locker___">Template
+ Class <code class="computeroutput"><span class="identifier">try_unique_array_locker</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></dd>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockers.locker_concepts_hpp"></a><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp" title="
+ Header &lt;boost/synchro/locker_concepts.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker_concepts</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__basiclockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">BasicLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__lockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">LockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__timedlockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">TimedLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__uniquelockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">UniqueLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__sharedlockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">SharedLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__upgradelockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">UpgradeLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__movablelockerconcept___">Template
+ Class <code class="computeroutput"><span class="identifier">MovableLockerConcept</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+</dl></div>
+<p>
+ Locker concepts.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">synchro</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">BasicLockerConcept</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">LockerConcept</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">TimedLockerConcept</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">UniqueLockerConcept</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">SharedLockerConcept</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">UpgradeLockerConcept</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">MovableLockerConcept</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="boost_synchro.reference.lockers.locker_concepts_hpp.template_class__basiclockerconcept___"></a><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__basiclockerconcept___" title="Template
+ Class BasicLockerConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">BasicLockerConcept</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">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">BasicLockerConcept</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lockable_type</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">BasicLockerConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">const</span> <span class="identifier">Locker</span> <span class="identifier">l1</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">);</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l1</span><span class="special">.</span><span class="identifier">is_locking</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">))</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l1</span><span class="special">.</span><span class="identifier">owns_lock</span><span class="special">())</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l1</span><span class="special">)</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="keyword">if</span> <span class="special">(!</span><span class="identifier">l1</span><span class="special">)</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="identifier">lockable_type</span> <span class="identifier">mtx_</span><span class="special">;</span>
+ <span class="identifier">system_time</span> <span class="identifier">t</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.locker_concepts_hpp.template_class__lockerconcept___"></a><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__lockerconcept___" title="Template
+ Class LockerConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">LockerConcept</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">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">LockerConcept</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">BasicLockerConcept</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;));</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lockable_type</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">LockerConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">Locker</span> <span class="identifier">l2</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">,</span> <span class="identifier">defer_lock</span><span class="special">);</span>
+ <span class="identifier">Locker</span> <span class="identifier">l3</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">,</span> <span class="identifier">adopt_lock</span><span class="special">);</span>
+ <span class="identifier">Locker</span> <span class="identifier">l4</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">,</span> <span class="identifier">try_to_lock</span><span class="special">);</span>
+ <span class="identifier">l2</span><span class="special">.</span><span class="identifier">lock</span><span class="special">();</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l2</span><span class="special">.</span><span class="identifier">try_lock</span><span class="special">())</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="identifier">l2</span><span class="special">.</span><span class="identifier">unlock</span><span class="special">();</span>
+ <span class="identifier">l2</span><span class="special">.</span><span class="identifier">release</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="identifier">lockable_type</span> <span class="identifier">mtx_</span><span class="special">;</span>
+ <span class="identifier">system_time</span> <span class="identifier">t</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.locker_concepts_hpp.template_class__timedlockerconcept___"></a><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__timedlockerconcept___" title="Template
+ Class TimedLockerConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">TimedLockerConcept</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">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">TimedLockerConcept</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">LockerConcept</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;));</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lockable_type</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">TimedLockerConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">const</span> <span class="identifier">Locker</span> <span class="identifier">l1</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">);</span>
+ <span class="identifier">Locker</span> <span class="identifier">l5</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">,</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="identifier">Locker</span> <span class="identifier">l6</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">1</span><span class="special">));</span>
+ <span class="identifier">Locker</span> <span class="identifier">l7</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">mtx_</span><span class="special">);</span>
+ <span class="identifier">Locker</span> <span class="identifier">l8</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">1</span><span class="special">),</span> <span class="identifier">mtx_</span><span class="special">);</span>
+ <span class="identifier">l5</span><span class="special">.</span><span class="identifier">lock_until</span><span class="special">(</span><span class="identifier">t</span><span class="special">);</span>
+ <span class="identifier">l5</span><span class="special">.</span><span class="identifier">lock_for</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">1</span><span class="special">));</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l5</span><span class="special">.</span><span class="identifier">try_lock_until</span><span class="special">(</span><span class="identifier">t</span><span class="special">))</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">l5</span><span class="special">.</span><span class="identifier">try_lock_for</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">seconds</span><span class="special">(</span><span class="number">1</span><span class="special">)))</span> <span class="keyword">return</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="identifier">lockable_type</span> <span class="identifier">mtx_</span><span class="special">;</span>
+ <span class="identifier">system_time</span> <span class="identifier">t</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.locker_concepts_hpp.template_class__uniquelockerconcept___"></a><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__uniquelockerconcept___" title="Template
+ Class UniqueLockerConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">UniqueLockerConcept</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">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">UniqueLockerConcept</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">TimedLockerConcept</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;));</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">UniqueLockerConcept</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><h5 class="title">
+<a name="boost_synchro.reference.lockers.locker_concepts_hpp.template_class__sharedlockerconcept___"></a><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__sharedlockerconcept___" title="Template
+ Class SharedLockerConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">SharedLockerConcept</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">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">SharedLockerConcept</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">TimedLockerConcept</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;));</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">SharedLockerConcept</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><h5 class="title">
+<a name="boost_synchro.reference.lockers.locker_concepts_hpp.template_class__upgradelockerconcept___"></a><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__upgradelockerconcept___" title="Template
+ Class UpgradeLockerConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">UpgradeLockerConcept</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">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">UpgradeLockerConcept</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">TimedLockerConcept</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;));</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">UpgradeLockerConcept</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><h5 class="title">
+<a name="boost_synchro.reference.lockers.locker_concepts_hpp.template_class__movablelockerconcept___"></a><a href="lockers.html#boost_synchro.reference.lockers.locker_concepts_hpp.template_class__movablelockerconcept___" title="Template
+ Class MovableLockerConcept&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">MovableLockerConcept</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">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">MovableLockerConcept</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lockable_type</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">LockerConcept</span><span class="special">&lt;</span><span class="identifier">lockable_type</span><span class="special">&gt;));</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">MovableLockerConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">Locker</span> <span class="identifier">l1</span><span class="special">(</span><span class="identifier">mtx_</span><span class="special">);</span>
+ <span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">l2</span><span class="special">(</span><span class="identifier">l1</span><span class="special">);</span>
+ <span class="identifier">Locker</span> <span class="identifier">l3</span><span class="special">(</span><span class="identifier">l1</span><span class="special">.</span><span class="identifier">move</span><span class="special">());</span>
+ <span class="identifier">BOOST_ASSERT</span><span class="special">((</span><span class="identifier">l2</span><span class="special">.</span><span class="identifier">mutex</span><span class="special">()!=&amp;</span><span class="identifier">mtx_</span><span class="special">));</span>
+ <span class="identifier">l3</span><span class="special">.</span><span class="identifier">lock</span><span class="special">();</span>
+ <span class="identifier">l2</span> <span class="special">=</span> <span class="identifier">l3</span><span class="special">.</span><span class="identifier">move</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="identifier">lockable_type</span> <span class="identifier">mtx_</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockers.is_strict_locker_hpp"></a><a href="lockers.html#boost_synchro.reference.lockers.is_strict_locker_hpp" title="
+ Header &lt;boost/synchro/locker/is_strict_locker.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">is_strict_locker</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.is_strict_locker_hpp.metafunction__is_strict_locker_">Metafunction
+ <code class="computeroutput"><span class="identifier">is_strict_locker</span></code></a></span></dt></dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.is_strict_locker_hpp.metafunction__is_strict_locker_"></a><a href="lockers.html#boost_synchro.reference.lockers.is_strict_locker_hpp.metafunction__is_strict_locker_" title="Metafunction
+ is_strict_locker">Metafunction
+ <code class="computeroutput"><span class="identifier">is_strict_locker</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">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_strict_locker</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">value</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockers.strict_locker_hpp"></a><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp" title="
+ Header &lt;boost/synchro/locker/strict_locker.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">strict_locker</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.class__strict_locker_">Class
+ <code class="computeroutput"><span class="identifier">strict_locker</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.class__nested_strict_locker_">Class
+ <code class="computeroutput"><span class="identifier">nested_strict_locker</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.template_class__nested_strict_locker_">Template
+ Class <code class="computeroutput"><span class="identifier">nested_strict_locker</span></code></a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.strict_locker_hpp.class__strict_locker_"></a><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.class__strict_locker_" title="Class
+ strict_locker">Class
+ <code class="computeroutput"><span class="identifier">strict_locker</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span>
+ </p>
+<p>
+ namespace boost { namespace synchro {
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">StrictLockerConcept</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lockable_type</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+ <span class="identifier">BOOST_STATIC_ASSERT</span><span class="special">((</span><span class="identifier">is_strict_locker</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">));</span>
+
+ <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">l</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">BOOST_ASSERT</span><span class="special">((</span><span class="identifier">l</span><span class="special">.</span><span class="identifier">is_locking</span><span class="special">(</span><span class="identifier">lock</span><span class="special">)));</span>
+ <span class="special">}</span>
+
+ <span class="identifier">BOOST_CONCEPT_USAGE</span><span class="special">(</span><span class="identifier">StrictLockerConcept</span><span class="special">)</span> <span class="special">{</span>
+ <span class="special">{</span>
+<span class="comment">// Locker l(lock);
+</span><span class="comment">// BOOST_ASSERT((l));
+</span> <span class="special">}</span>
+ <span class="special">}</span>
+ <span class="identifier">lockable_type</span> <span class="identifier">lock</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strict_locker</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">Lockable</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">bool_type</span><span class="special">;</span>
+
+ <span class="keyword">explicit</span> <span class="identifier">strict_locker</span><span class="special">(</span><span class="identifier">lockable_type</span><span class="special">&amp;</span> <span class="identifier">obj</span><span class="special">);</span>
+ <span class="special">~</span><span class="identifier">strict_locker</span><span class="special">();</span>
+
+ <span class="keyword">operator</span> <span class="identifier">bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="identifier">owns_lock</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="identifier">lockable_type</span><span class="special">*</span> <span class="identifier">mutex</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="identifier">BOOST_ADRESS_OF_DELETE</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">)</span>
+ <span class="identifier">BOOST_HEAP_ALLOCATION_DELETE</span><span class="special">()</span>
+ <span class="identifier">BOOST_DEFAULT_CONSTRUCTOR_DELETE</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">)</span> <span class="comment">/*&lt; disable default construction &gt;*/</span>
+ <span class="identifier">BOOST_COPY_CONSTRUCTOR_DELETE</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">)</span> <span class="comment">/*&lt; disable copy construction &gt;*/</span>
+ <span class="identifier">BOOST_COPY_ASSIGNEMENT_DELETE</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">)</span> <span class="comment">/*&lt; disable copy asignement &gt;*/</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_strict_locker</span><span class="special">&lt;</span><span class="identifier">strict_locker</span><span class="special">&lt;</span><span class="identifier">Lockable</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span> <span class="special">{};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">nested_strict_locker</span> <span class="special">{</span>
+ <span class="identifier">BOOST_CONCEPT_ASSERT</span><span class="special">((</span><span class="identifier">MovableLockerConcept</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;));</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">lockable_type</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">lockable_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">syntactic_lock_traits</span><span class="special">&lt;</span><span class="identifier">lockable_type</span><span class="special">&gt;::</span><span class="identifier">lock_error</span> <span class="identifier">lock_error</span><span class="special">;</span>
+
+ <span class="identifier">nested_strict_locker</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">locker</span><span class="special">);</span>
+ <span class="special">~</span><span class="identifier">nested_strict_locker</span><span class="special">();</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="special">(</span><span class="identifier">nested_strict_locker</span><span class="special">::*</span><span class="identifier">bool_type</span><span class="special">)()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">operator</span> <span class="identifier">bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="identifier">owns_lock</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">lockable_type</span><span class="special">*</span> <span class="identifier">mutex</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">bool</span> <span class="identifier">is_locking</span><span class="special">(</span><span class="identifier">lockable_type</span><span class="special">*</span> <span class="identifier">l</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="identifier">BOOST_ADRESS_OF_DELETE</span><span class="special">(</span><span class="identifier">nested_strict_locker</span><span class="special">)</span>
+ <span class="identifier">BOOST_HEAP_ALLOCATEION_DELETE</span><span class="special">(</span><span class="identifier">nested_strict_locker</span><span class="special">)</span>
+ <span class="identifier">BOOST_DEFAULT_CONSTRUCTOR_DELETE</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">)</span> <span class="comment">/*&lt; disable default construction &gt;*/</span>
+ <span class="identifier">BOOST_COPY_CONSTRUCTOR_DELETE</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">)</span> <span class="comment">/*&lt; disable copy construction &gt;*/</span>
+ <span class="identifier">BOOST_COPY_ASSIGNEMENT_DELETE</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">)</span> <span class="comment">/*&lt; disable copy asignement &gt;*/</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_strict_locker</span><span class="special">&lt;</span><span class="identifier">nested_strict_locker</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span> <span class="special">{}</span> <span class="special">;</span>
+</pre>
+<p>
+ }}
+ </p>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+<p>
+ [Note strict_locker is not a model of Lockable concept.]
+ </p>
+<p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">strict_locker</span></code>
+ template parameters</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+<code class="computeroutput"><span class="identifier">Lockable</span></code> : The exclusive
+ lockable type used to synchronize exclusive access
+ </li></ul></div>
+<p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">strict_locker</span></code>
+ public types</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+<code class="computeroutput"><span class="identifier">lockable_type</span></code> : The
+ exclusive lockable type used to synchronize exclusive access
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">lock_error</span></code> : The exception
+ type throw incase of errors
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">bool_type</span></code> : The bool_type
+ of the safe_bool idiom
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">nested_strict_locker</span></code>
+ public member functions</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li><code class="computeroutput"><span class="keyword">explicit</span> <span class="identifier">strict_locker</span><span class="special">(</span><span class="identifier">lockable_type</span><span class="special">&amp;</span> <span class="identifier">obj</span><span class="special">);</span></code></li>
+<li><code class="computeroutput"><span class="special">~</span><span class="identifier">strict_locker</span><span class="special">();</span></code></li>
+<li><code class="computeroutput"><span class="keyword">operator</span> <span class="identifier">bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span></code></li>
+<li><code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span><span class="special">;</span></code></li>
+<li><code class="computeroutput"><span class="keyword">operator</span> <span class="identifier">bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span></code></li>
+<li><code class="computeroutput"><span class="identifier">lockable_type</span><span class="special">*</span>
+ <span class="identifier">mutex</span><span class="special">()</span>
+ <span class="keyword">const</span><span class="special">;</span></code></li>
+<li><code class="computeroutput"><span class="identifier">lockable_type</span><span class="special">*</span>
+ <span class="identifier">get_lockable</span><span class="special">()</span>
+ <span class="keyword">const</span><span class="special">;</span></code></li>
+</ul></div>
+<p>
+ <span class="bold"><strong><code class="computeroutput"><span class="identifier">nested_strict_locker</span></code>
+ private and not defined member functions</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li><code class="computeroutput"><span class="identifier">strict_locker</span><span class="special">()</span></code></li>
+<li><code class="computeroutput"><span class="identifier">strict_locker</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">&amp;);</span></code></li>
+<li><code class="computeroutput"><span class="keyword">operator</span><span class="special">=(</span><span class="identifier">strict_locker</span><span class="special">&amp;);</span></code></li>
+<li><code class="computeroutput"><span class="keyword">operator</span><span class="special">&amp;();</span></code></li>
+<li><code class="computeroutput"><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">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">)</span></code></li>
+<li><code class="computeroutput"><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">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">)</span></code></li>
+<li><code class="computeroutput"><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></code></li>
+<li><code class="computeroutput"><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></code></li>
+</ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.strict_locker_hpp.class__nested_strict_locker_"></a><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.class__nested_strict_locker_" title="Class
+ nested_strict_locker">Class
+ <code class="computeroutput"><span class="identifier">nested_strict_locker</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span>
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">nested_strict_locker</span> <span class="special">:</span> <span class="keyword">private</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">noncopyable</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">locker_traits</span><span class="special">&lt;</span><span class="identifier">Locker</span><span class="special">&gt;::</span><span class="identifier">bad_lock</span> <span class="identifier">bad_lock</span><span class="special">;</span>
+
+ <span class="identifier">nested_strict_locker</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">);</span>
+ <span class="special">~</span><span class="identifier">nested_strict_locker</span><span class="special">();</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">unspecified</span> <span class="identifier">bool_type</span><span class="special">;</span>
+ <span class="keyword">operator</span> <span class="identifier">bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span>
+ <span class="keyword">bool</span> <span class="identifier">owns_lock</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="identifier">Mutex</span><span class="special">*</span> <span class="identifier">mutex</span><span class="special">()</span> <span class="keyword">const</span>
+<span class="keyword">private</span><span class="special">:</span>
+ <span class="identifier">strict_locker</span><span class="special">();</span>
+ <span class="identifier">BOOST_NON_ALIAS</span><span class="special">(</span><span class="identifier">strict_locker</span><span class="special">);</span>
+ <span class="identifier">BOOST_NON_HEAP_ALLOCATED</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.strict_locker_hpp.template_class__nested_strict_locker_"></a><a href="lockers.html#boost_synchro.reference.lockers.strict_locker_hpp.template_class__nested_strict_locker_" title="Template
+ Class nested_strict_locker">Template
+ Class <code class="computeroutput"><span class="identifier">nested_strict_locker</span></code></a>
+</h5></div></div></div>
+<p>
+ A reverse (or anti) locker.
+ </p>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span>
+ </p>
+<p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockers.reverse_locker_hpp"></a><a href="lockers.html#boost_synchro.reference.lockers.reverse_locker_hpp" title="
+ Header &lt;boost/synchro/locker/reverse_locker.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">reverse_locker</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.reverse_locker_hpp.class__reverse_lock_">Class
+ <code class="computeroutput"><span class="identifier">reverse_lock</span></code></a></span></dt></dl></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">reverse_locker</span><span class="special">;</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.reverse_locker_hpp.class__reverse_lock_"></a><a href="lockers.html#boost_synchro.reference.lockers.reverse_locker_hpp.class__reverse_lock_" title="Class
+ reverse_lock">Class
+ <code class="computeroutput"><span class="identifier">reverse_lock</span></code></a>
+</h5></div></div></div>
+<p>
+ This is an interesting adapter class that changes a Lockable into a reverse
+ lockable, i.e.,<code class="computeroutput"><span class="identifier">lock</span></code> on
+ this class calls <code class="computeroutput"><span class="identifier">unlock</span></code>
+ on the lockable, and <code class="computeroutput"><span class="identifier">unlock</span></code>
+ on this class calls <code class="computeroutput"><span class="identifier">lock</span></code>
+ on the lock. One motivation for this class is when we temporarily want
+ to unlock a lock (which we have already locked) but then re-lock it soon
+ after.
+ </p>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span>
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">reverse_locker</span>
+<span class="special">{</span>
+ <span class="identifier">reverse_locker</span><span class="special">(</span><span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">mtx</span><span class="special">);</span>
+ <span class="special">~</span><span class="identifier">reverse_locker</span><span class="special">();</span>
+
+<span class="keyword">protected</span><span class="special">:</span>
+ <span class="identifier">Lockable</span><span class="special">&amp;</span> <span class="identifier">mtx_</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockers.nested_reverse_locker_hpp"></a><a href="lockers.html#boost_synchro.reference.lockers.nested_reverse_locker_hpp" title="
+ Header &lt;boost/synchro/locker/nested_reverse_locker.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">nested_reverse_locker</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.nested_reverse_locker_hpp.class__nested_reverse_locker_">Class
+ <code class="computeroutput"><span class="identifier">nested_reverse_locker</span></code></a></span></dt></dl></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">nested_reverse_locker</span><span class="special">;</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.nested_reverse_locker_hpp.class__nested_reverse_locker_"></a><a href="lockers.html#boost_synchro.reference.lockers.nested_reverse_locker_hpp.class__nested_reverse_locker_" title="Class
+ nested_reverse_locker">Class
+ <code class="computeroutput"><span class="identifier">nested_reverse_locker</span></code></a>
+</h5></div></div></div>
+<p>
+ This is an interesting adapter class that changes a locker into a reverse
+ locker, i.e., <code class="computeroutput"><span class="identifier">unlock</span></code>
+ on construction and <code class="computeroutput"><span class="identifier">lock</span></code>
+ on destruction. One motivation for this class is when we temporarily
+ want to unlock a lock (locked by another locker) but then re-lock it
+ soon after.
+ </p>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span>
+ </p>
+<p>
+ template &lt;typename Locker&gt; class nested_reverse_locker : boost::noncopyable
+ { BOOST_CONCEPT_ASSERT((MovableLockerConcept&lt;Locker&gt;)); public:
+ explicit nested_reverse_locker(Locker&amp; locker); ~nested_reverse_locker();
+ };
+ </p>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockers.condition_locker_hpp"></a><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp" title="
+ Header &lt;boost/synchro/locker/condition_locker.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">condition_locker</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_backdoor_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_backdoor</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_safe_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_safe</span></code></a></span></dt>
+<dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_unique_locker_">Template
+ Class <code class="computeroutput"><span class="identifier">condition_unique_locker</span></code></a></span></dt>
+</dl></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">condition_backdoor</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">condition_safe</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">condition_unique_locker</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">condition_shared_locker</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">condition_unique_lockable</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Lockable</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">condition_shared_lockable</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_backdoor_"></a><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_backdoor_" title="Template
+ Class condition_backdoor">Template
+ Class <code class="computeroutput"><span class="identifier">condition_backdoor</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">condition_backdoor</span> <span class="special">{</span>
+ <span class="identifier">condition_backdoor</span><span class="special">(</span><span class="identifier">condition_safe</span><span class="special">&lt;</span><span class="identifier">Condition</span><span class="special">&gt;&amp;</span><span class="identifier">cnd</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">wait</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_until</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">duration_type</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_for</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">duration_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">wait_when</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">predicate_type</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_when_until</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">predicate_type</span> <span class="identifier">pred</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">predicate_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">duration_type</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_when_for</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">,</span> <span class="identifier">predicate_type</span> <span class="identifier">pred</span><span class="special">,</span> <span class="identifier">duration_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">notify_one</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Locker</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">notify_all</span><span class="special">(</span><span class="identifier">Locker</span><span class="special">&amp;</span> <span class="identifier">lock</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_safe_"></a><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_safe_" title="Template
+ Class condition_safe">Template
+ Class <code class="computeroutput"><span class="identifier">condition_safe</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Condition</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">condition_safe</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="identifier">Condition</span> <span class="identifier">condition</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">condition_backdoor</span><span class="special">&lt;</span><span class="identifier">Condition</span><span class="special">&gt;</span> <span class="identifier">backdoor</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">notify_one</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">notify_all</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_unique_locker_"></a><a href="lockers.html#boost_synchro.reference.lockers.condition_locker_hpp.template_class__condition_unique_locker_" title="Template
+ Class condition_unique_locker">Template
+ Class <code class="computeroutput"><span class="identifier">condition_unique_locker</span></code></a>
+</h5></div></div></div>
+<p>
+ template &lt; typename Lockable, class Condition=condition_safe&lt;typename
+ best_condition&lt;Lockable&gt;::type &gt; &gt; class condition_unique_locker
+ : protected unique_lock&lt;Lockable&gt; { BOOST_CONCEPT_ASSERT((LockableConcept&lt;Lockable&gt;));
+ public: typedef Lockable lockable_type; typedef Condition condition;
+ </p>
+<pre class="programlisting"><span class="keyword">explicit</span> <span class="identifier">condition_unique_locker</span><span class="special">(</span><span class="identifier">lockable_type</span><span class="special">&amp;</span> <span class="identifier">obj</span><span class="special">);</span>
+<span class="identifier">condition_unique_locker</span><span class="special">(</span><span class="identifier">lockable_type</span><span class="special">&amp;</span> <span class="identifier">obj</span><span class="special">,</span> <span class="identifier">condition</span> <span class="special">&amp;</span><span class="identifier">cond</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
+<span class="identifier">condition_unique_locker</span><span class="special">(</span><span class="identifier">lockable_type</span><span class="special">&amp;</span> <span class="identifier">obj</span><span class="special">,</span> <span class="identifier">condition</span> <span class="special">&amp;</span><span class="identifier">cond</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
+<span class="special">~</span><span class="identifier">condition_unique_locker</span><span class="special">();</span>
+
+<span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="special">(</span><span class="identifier">condition_unique_locker</span><span class="special">::*</span><span class="identifier">bool_type</span><span class="special">)()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">operator</span> <span class="identifier">bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">bool</span> <span class="identifier">owns_lock</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">bool</span> <span class="identifier">is_locking</span><span class="special">(</span><span class="identifier">lockable_type</span><span class="special">*</span> <span class="identifier">l</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+
+<span class="keyword">void</span> <span class="identifier">relock_on</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span> <span class="identifier">cond</span><span class="special">);</span>
+<span class="keyword">void</span> <span class="identifier">relock_until</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span> <span class="identifier">cond</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">duration_type</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">relock_on_for</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span> <span class="identifier">cond</span><span class="special">,</span> <span class="identifier">duration_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">relock_when</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span><span class="identifier">cond</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">);</span>
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">relock_when_until</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span><span class="identifier">cond</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Predicate</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">duration_type</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">relock_when_for</span><span class="special">(</span><span class="identifier">condition</span> <span class="special">&amp;</span><span class="identifier">cond</span><span class="special">,</span> <span class="identifier">Predicate</span> <span class="identifier">pred</span><span class="special">,</span>
+ <span class="identifier">duration_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+<span class="comment">/*&lt; no possibility to unlock without blocking on wait... &gt;*/</span>
+</pre>
+<p>
+ };
+ </p>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_synchro.reference.lockers.externally_locked_hpp"></a><a href="lockers.html#boost_synchro.reference.lockers.externally_locked_hpp" title="
+ Header &lt;boost/synchro/locker/externally_locked.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">synchro</span><span class="special">/</span><span class="identifier">locker</span><span class="special">/</span><span class="identifier">externally_locked</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="lockers.html#boost_synchro.reference.lockers.externally_locked_hpp.template_class__externally_locked_">Template
+ Class <code class="computeroutput"><span class="identifier">externally_locked</span></code></a></span></dt></dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_synchro.reference.lockers.externally_locked_hpp.template_class__externally_locked_"></a><a href="lockers.html#boost_synchro.reference.lockers.externally_locked_hpp.template_class__externally_locked_" title="Template
+ Class externally_locked">Template
+ Class <code class="computeroutput"><span class="identifier">externally_locked</span></code></a>
+</h5></div></div></div>
+<p>
+ <span class="bold"><strong>Synopsis</strong></span>
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Lockable</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">externally_locked</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">externally_locked</span><span class="special">(</span><span class="identifier">Lockabl