$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r82306 - in branches/release: boost/thread boost/thread/detail boost/thread/pthread libs/thread/doc
From: vicente.botet_at_[hidden]
Date: 2013-01-01 04:41:04
Author: viboes
Date: 2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
New Revision: 82306
URL: http://svn.boost.org/trac/boost/changeset/82306
Log:
Thread: merge from trunk 1.53
Text files modified: 
   branches/release/boost/thread/detail/thread.hpp                  |    11 ++++-----                               
   branches/release/boost/thread/pthread/condition_variable.hpp     |    14 ++++++-----                             
   branches/release/boost/thread/pthread/condition_variable_fwd.hpp |    14 ++++++-----                             
   branches/release/boost/thread/scoped_thread.hpp                  |    12 ++++++----                              
   branches/release/libs/thread/doc/changes.qbk                     |    18 ++++++++++-----                         
   branches/release/libs/thread/doc/condition_variables.qbk         |    24 ++++----------------                    
   branches/release/libs/thread/doc/mutex_concepts.qbk              |    25 +++++++++++++++++++--                   
   branches/release/libs/thread/doc/scoped_thread.qbk               |    46 +++++++++++++++------------------------ 
   branches/release/libs/thread/doc/shared_mutex_ref.qbk            |     2                                         
   branches/release/libs/thread/doc/thread_ref.qbk                  |     9 ++++++-                                 
   10 files changed, 93 insertions(+), 82 deletions(-)
Modified: branches/release/boost/thread/detail/thread.hpp
==============================================================================
--- branches/release/boost/thread/detail/thread.hpp	(original)
+++ branches/release/boost/thread/detail/thread.hpp	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -743,9 +743,9 @@
     }
 #endif
     void thread::join() {
-        BOOST_THREAD_ASSERT_PRECONDITION(  this_thread::get_id() != get_id(),
-            thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself")
-        );
+        if (this_thread::get_id() == get_id())
+          boost::throw_exception(thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself"));
+
         BOOST_THREAD_VERIFY_PRECONDITION( join_noexcept(),
             thread_resource_error(system::errc::invalid_argument, "boost thread: thread not joinable")
         );
@@ -757,9 +757,8 @@
     bool thread::do_try_join_until(uintmax_t timeout)
 #endif
     {
-        BOOST_THREAD_ASSERT_PRECONDITION( this_thread::get_id() != get_id(),
-            thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself")
-        );
+        if (this_thread::get_id() == get_id())
+          boost::throw_exception(thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself"));
         bool res;
         if (do_try_join_until_noexcept(timeout, res))
         {
Modified: branches/release/boost/thread/pthread/condition_variable.hpp
==============================================================================
--- branches/release/boost/thread/pthread/condition_variable.hpp	(original)
+++ branches/release/boost/thread/pthread/condition_variable.hpp	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -307,12 +307,14 @@
                 const chrono::duration<Rep, Period>& d,
                 Predicate pred)
         {
-          while (!pred())
-          {
-              if (wait_for(lock, d) == cv_status::timeout)
-                  return pred();
-          }
-          return true;
+          return wait_until(lock, chrono::steady_clock::now() + d, boost::move(pred));
+
+//          while (!pred())
+//          {
+//              if (wait_for(lock, d) == cv_status::timeout)
+//                  return pred();
+//          }
+//          return true;
         }
 
         template <class lock_type>
Modified: branches/release/boost/thread/pthread/condition_variable_fwd.hpp
==============================================================================
--- branches/release/boost/thread/pthread/condition_variable_fwd.hpp	(original)
+++ branches/release/boost/thread/pthread/condition_variable_fwd.hpp	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -221,12 +221,14 @@
                 const chrono::duration<Rep, Period>& d,
                 Predicate pred)
         {
-          while (!pred())
-          {
-              if (wait_for(lock, d) == cv_status::timeout)
-                  return pred();
-          }
-          return true;
+          return wait_until(lock, chrono::steady_clock::now() + d, boost::move(pred));
+
+//          while (!pred())
+//          {
+//              if (wait_for(lock, d) == cv_status::timeout)
+//                  return pred();
+//          }
+//          return true;
         }
 #endif
 
Modified: branches/release/boost/thread/scoped_thread.hpp
==============================================================================
--- branches/release/boost/thread/scoped_thread.hpp	(original)
+++ branches/release/boost/thread/scoped_thread.hpp	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -49,13 +49,15 @@
      *
      * Effects: move the thread to own @c t.
      */
-    explicit strict_scoped_thread(BOOST_THREAD_RV_REF(thread) t) :
+    explicit strict_scoped_thread(BOOST_THREAD_RV_REF(thread) t) BOOST_NOEXCEPT :
     t_(boost::move(t))
     {
     }
 
     /**
      * Destructor
+     * Effects: Call the CallableThread functor before destroying the owned thread.
+     * Remark: The CallableThread should not throw when joining the thread as the scoped variable is on a scope outside the thread function.
      */
     ~strict_scoped_thread()
     {
@@ -112,7 +114,7 @@
      *
      * Effects: move the thread to own @c t.
      */
-    explicit scoped_thread(BOOST_THREAD_RV_REF(thread) t) :
+    explicit scoped_thread(BOOST_THREAD_RV_REF(thread) t) BOOST_NOEXCEPT :
     t_(boost::move(t))
     {
     }
@@ -125,14 +127,14 @@
     /**
      * Move constructor.
      */
-    scoped_thread(BOOST_RV_REF(scoped_thread) x) :
+    scoped_thread(BOOST_RV_REF(scoped_thread) x) BOOST_NOEXCEPT :
     t_(boost::move(x.t_))
     {}
 
     /**
      * Destructor
      *
-     * Effects: destroys the internal destroyer before destroying the owned thread.
+     * Effects: Call the CallableThread functor before destroying the owned thread.
      */
     ~scoped_thread()
     {
@@ -153,7 +155,7 @@
     /**
      *
      */
-    void swap(scoped_thread& x)BOOST_NOEXCEPT
+    void swap(scoped_thread& x) BOOST_NOEXCEPT
     {
       t_.swap(x.t_);
     }
Modified: branches/release/libs/thread/doc/changes.qbk
==============================================================================
--- branches/release/libs/thread/doc/changes.qbk	(original)
+++ branches/release/libs/thread/doc/changes.qbk	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -10,13 +10,13 @@
 
 [heading Version 4.0.0 - boost 1.53]
 
-Breaking changes:
+[*Breaking changes:]
 
 [warning 
 BOOST_THREAD_VERSION==3 by default since Boost 1.53. So that all the deprecated features since 1.50 are not included by default. You can change this by setting the appropriated define (see Configuration section).
 ]
 
-Deprecated features:
+[*Deprecated features:]
 
 [warning Deprecated features since boost 1.53 will be available only until boost 1.58.]
 
@@ -25,12 +25,13 @@
 
 * [@http://svn.boost.org/trac/boost/ticket/7537 #7537] deprecate Mutex::scoped_lock and scoped_try_lock and boost::condition
 
-New Features:
+[*New Features:]
 
 * [@http://svn.boost.org/trac/boost/ticket/6270 #6270] c++11 compliance: Add thread constructor from movable callable and movable arguments
 Provided when BOOST_THREAD_PROVIDES_VARIADIC_THREAD is defined (Default value from Boost 1.55):
 See BOOST_THREAD_PROVIDES_VARIADIC_THREAD and BOOST_THREAD_DONT_PROVIDE_VARIADIC_THREAD.
 
+* [@http://svn.boost.org/trac/boost/ticket/7279 #7279] C++11 compliance: Add noexcept in system related functions
 * [@http://svn.boost.org/trac/boost/ticket/7280 #7280] C++11 compliance: Add promise::...at_thread_exit functions
 
 * [@http://svn.boost.org/trac/boost/ticket/7281 #7281] C++11 compliance: Add ArgTypes to packaged_task template. 
@@ -45,26 +46,29 @@
 
 * [@http://svn.boost.org/trac/boost/ticket/7413 #7413] C++11 compliance: Add async when the launch policy is deferred.
 * [@http://svn.boost.org/trac/boost/ticket/7414 #7414] C++11 compliance: future::get post-condition should be valid()==false.
+* [@http://svn.boost.org/trac/boost/ticket/7422 #7422] Provide a condition variable with zero-overhead performance penality.
 * [@http://svn.boost.org/trac/boost/ticket/7414 #7444] Async: Add make_future/make_shared_future.
-* [@http://svn.boost.org/trac/boost/ticket/7449 #7449] Synchro: Add a synchronized value class.
 * [@http://svn.boost.org/trac/boost/ticket/7540 #7540] Threads: Add a helper class that join a thread on destruction.
 * [@http://svn.boost.org/trac/boost/ticket/7541 #7541] Threads: Add a thread wrapper class that joins on destruction.
 * [@http://svn.boost.org/trac/boost/ticket/7575 #7575] C++11 compliance: A future created by async should "join" in the destructor.
 * [@http://svn.boost.org/trac/boost/ticket/7587 #7587] Synchro: Add strict_lock and nested_strict_lock.
 * [@http://svn.boost.org/trac/boost/ticket/7588 #7588] Synchro: Split the locks.hpp in several files to limit dependencies.
-* [@http://svn.boost.org/trac/boost/ticket/7589 #7589] Synchro: Add polymorphic lockables.
 * [@http://svn.boost.org/trac/boost/ticket/7590 #7590] Synchro: Add lockable concept checkers based on Boost.ConceptCheck.
 * [@http://svn.boost.org/trac/boost/ticket/7591 #7591] Add lockable traits that can be used with enable_if.
 * [@http://svn.boost.org/trac/boost/ticket/7592 #7592] Synchro: Add a null_mutex that is a no-op and that is a model of UpgardeLockable.
 * [@http://svn.boost.org/trac/boost/ticket/7593 #7593] Synchro: Add a externally_locked class.
 * [@http://svn.boost.org/trac/boost/ticket/7590 #7594] Threads: Allow to disable thread interruptions.
 
-Fixed Bugs:
+[*Fixed Bugs:]
 
 * [@http://svn.boost.org/trac/boost/ticket/7657 #7657] Serious performance and memory consumption hit if condition_variable methods condition notify_one or notify_all is used repeatedly.
+* [@http://svn.boost.org/trac/boost/ticket/7665 #7665] this_thread::sleep_for no longer uses steady_clock in thread.
 * [@http://svn.boost.org/trac/boost/ticket/7668 #7668] thread_group::join_all() should check whether its threads are joinable.
 * [@http://svn.boost.org/trac/boost/ticket/7669 #7669] thread_group::join_all() should catch resource_deadlock_would_occur.
 * [@http://svn.boost.org/trac/boost/ticket/7672 #7672] lockable_traits.hpp syntax error: "defined" token misspelled.
+* [@http://svn.boost.org/trac/boost/ticket/7798 #7798] boost::future set_wait_callback thread safety issues.
+* [@http://svn.boost.org/trac/boost/ticket/7808 #7808] Incorrect description of effects for this_thread::sleep_for and this_thread::sleep_until.
+* [@http://svn.boost.org/trac/boost/ticket/7812 #7812] Returns: cv_status::no_timeout if the call is returning because the time period specified by rel_time has elapsed, cv_status::timeout otherwise.
 
 
 [heading Version 3.1.0 - boost 1.52]
@@ -340,6 +344,8 @@
 
 # Add some of the extension proposed in [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3428.pdf A Standardized Representation of Asynchronous Operations], in particular
 
+  * [@http://svn.boost.org/trac/boost/ticket/7589 #7589] Synchro: Add polymorphic lockables.
+  * [@http://svn.boost.org/trac/boost/ticket/7449 #7449] Synchro: Add a synchronized value class.
   * [@http://svn.boost.org/trac/boost/ticket/7445 #7445] Async: Add future<>.then.
   * [@http://svn.boost.org/trac/boost/ticket/7446 #7446] Async: Add when_any.
   * [@http://svn.boost.org/trac/boost/ticket/7447 #7447] Async: Add when_all.
Modified: branches/release/libs/thread/doc/condition_variables.qbk
==============================================================================
--- branches/release/libs/thread/doc/condition_variables.qbk	(original)
+++ branches/release/libs/thread/doc/condition_variables.qbk	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -131,7 +131,7 @@
                 const chrono::duration<Rep, Period>& d,
                 Predicate pred);
 
-        #if defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 || defined BOOST_THREAD_DONT_USE_CHRONO
+        #if defined BOOST_THREAD_USES_DATETIME
             bool timed_wait(boost::unique_lock<boost::mutex>& lock,boost::system_time const& abs_time);
             template<typename duration_type>
             bool timed_wait(boost::unique_lock<boost::mutex>& lock,duration_type const& rel_time);
@@ -419,14 +419,7 @@
 [variablelist
 
 [[Effects:] [As-if ``
-while(!pred())
-{
-    if(!wait_for(lock,rel_time))
-    {
-        return pred();
-    }
-}
-return true;
+return wait_until(lock, chrono::steady_clock::now() + d, boost::move(pred));
 ``]]
 
 ]
@@ -482,7 +475,7 @@
                 const chrono::duration<Rep, Period>& d,
                 Predicate pred);
 
-        #if defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 || defined BOOST_THREAD_DONT_USE_CHRONO
+        #if defined BOOST_THREAD_USES_DATETIME
             template<typename lock_type>
             bool timed_wait(lock_type& lock,boost::system_time const& abs_time);
             template<typename lock_type,typename duration_type>
@@ -731,19 +724,12 @@
 
 [endsect]
 
-[section:wait_for_predicate `template <class lock_type, class Rep, class Period, class Predicate> bool wait_until(lock_type& lock, const chrono::duration<Rep, Period>& rel_time, Predicate pred)`]
+[section:wait_for_predicate `template <class lock_type, class Rep, class Period, class Predicate> bool wait_for(lock_type& lock, const chrono::duration<Rep, Period>& rel_time, Predicate pred)`]
 
 [variablelist
 
 [[Effects:] [As-if ``
-while(!pred())
-{
-    if(!__cvany_wait_for(lock,rel_time))
-    {
-        return pred();
-    }
-}
-return true;
+return wait_until(lock, chrono::steady_clock::now() + d, boost::move(pred));
 ``]]
 
 ]
Modified: branches/release/libs/thread/doc/mutex_concepts.qbk
==============================================================================
--- branches/release/libs/thread/doc/mutex_concepts.qbk	(original)
+++ branches/release/libs/thread/doc/mutex_concepts.qbk	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -44,6 +44,8 @@
 
 [[Effects:] [The current thread blocks until ownership can be obtained for the current thread.]]
 
+[[Synchronization:] [Prior `unlock()` operations on the same object synchronizes with this operation. ]]
+
 [[Postcondition:] [The current thread owns `m`.]]
 
 [[Return type:] [`void`.]]
@@ -71,6 +73,8 @@
 
 [[Requires:] [The current thread owns `m`.]]
 
+[[Synchronization:] [This operation synchronizes with subsequent lock operations that obtain ownership on the same object.]]
+
 [[Effects:] [Releases a lock on `m` by the current thread.]]
 
 [[Return type:] [`void`.]]
@@ -119,6 +123,12 @@
 
 [[Effects:] [Attempt to obtain ownership for the current thread without blocking.]]
 
+[[Synchronization:] [If `try_lock()` returns true, prior `unlock()` operations on the same object synchronize with this operation.]]
+
+[[Note:] [Since `lock()` does not synchronize with a failed subsequent
+`try_lock()`, the visibility rules are weak enough that little would be known about the state after a
+failure, even in the absence of spurious failures.]]
+
 [[Return type:] [`bool`.]]
 
 [[Returns:] [`true` if ownership was obtained for the current thread, `false` otherwise.]]
@@ -213,6 +223,10 @@
 [[Effects:] [Attempt to obtain ownership for the current thread. Blocks until ownership can be obtained, or the specified time is
 reached. If the specified time has already passed, behaves as __try_lock_ref__.]]
 
+[[Synchronization:] [If `try_lock_until()` returns true, prior `unlock()` operations on the same object synchronize with this operation.]]
+
+[[Return type:] [`bool`.]]
+
 [[Returns:] [`true` if ownership was obtained for the current thread, `false` otherwise.]]
 
 [[Postcondition:] [If the call returns `true`, the current thread owns `m`.]]
@@ -227,13 +241,15 @@
 
 [[Effects:] [As-if `__try_lock_until(chrono::steady_clock::now() + rel_time)`.]]
 
+[[Synchronization:] [If `try_lock_for()` returns true, prior `unlock()` operations on the same object synchronize with this operation.]]
+
 ]
 [endsect]
 
 [warning
-DEPRECATED since 3.00. The following expressions were required on version 2, but are now deprecated.
+DEPRECATED since 4.00. The following expressions were required on version 2, but are now deprecated.
  
-Available only up to Boost 1.56. 
+Available only up to Boost 1.58. 
 
 Use instead __try_lock_for, __try_lock_until.  
 ]
@@ -2415,6 +2431,7 @@
 
 An instance of __reverse_lock doesn't ['own] the lock never.
 
+
 [section:constructor `reverse_lock(Lock & m)`]
 
 [variablelist
@@ -2436,7 +2453,9 @@
 
 [[Effects:] [Let be mtx the stored mutex*. If not 0 Invokes `mtx->__lock()` and gives again the `mtx` to the `Lock` using the `adopt_lock_t` overload.]]
 
-[[Throws:] [Nothing.]]
+[[Throws:] [Any exception thrown by `mtx->__lock()`.]]
+
+[[Remarks:] [Note that if `mtx->__lock()` throws an exception while unwinding the program will terminate, so don't use reverse_lock if an exception can be thrown.]]
 
 ]
 
Modified: branches/release/libs/thread/doc/scoped_thread.qbk
==============================================================================
--- branches/release/libs/thread/doc/scoped_thread.qbk	(original)
+++ branches/release/libs/thread/doc/scoped_thread.qbk	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -111,14 +111,14 @@
   };
 
 
-RAI @c thread wrapper adding a specific destroyer allowing to master what can be done at destruction time.
+RAI __thread wrapper adding a specific destroyer allowing to master what can be done at destruction time.
 
-CallableThread: A callable void(thread&) .
+CallableThread: A callable `void(thread&)`.
 
-The default is a join_if_joinable.
+The default is a `join_if_joinable`.
 
 
-thread std/boost::thread destructor terminates the program if the thread is not joinable.
+`std/boost::thread` destructor terminates the program if the __thread is not joinable.
 This wrapper can be used to join the thread before destroying it seems a natural need.
 
 [heading Example]
@@ -131,7 +131,7 @@
 
 [variablelist
 
-[[Effects:] [move the thread to own @c t]]
+[[Effects:] [move the thread to own `t_`]]
 
 [[Throws:] [Nothing]]
 
@@ -147,7 +147,8 @@
 
 [[Effects:] [Equivalent to `CallableThread()(t_)`.  ]]
 
-[[Throws:] [Nothing]]
+[[Throws:] [Nothing: The `CallableThread()(t_)` should not throw when joining the thread as the scoped variable is on a scope outside the thread function.]]
+
 
 ]
 
@@ -161,12 +162,13 @@
 
     class scoped_thread
     {
+      thread t_; // for exposition purposes only
     public:
         scoped_thread() noexcept;
         scoped_thread(const scoped_thread&) = delete;
         scoped_thread& operator=(const scoped_thread&) = delete;
 
-        explicit scoped_thread(thread&& th);
+        explicit scoped_thread(thread&& th) noexcept;
 
         ~scoped_thread();
 
@@ -182,10 +184,12 @@
 
         bool joinable() const noexcept;
         void join();
+    #ifdef BOOST_THREAD_USES_CHRONO
         template <class Rep, class Period>
         bool try_join_for(const chrono::duration<Rep, Period>& rel_time);
         template <class Clock, class Duration>
         bool try_join_until(const chrono::time_point<Clock, Duration>& t);
+    #endif
 
         void detach();
 
@@ -194,23 +198,11 @@
         typedef thread::native_handle_type native_handle_type;
         native_handle_type native_handle();
 
+    #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
         void interrupt();
         bool interruption_requested() const noexcept;
-
-
-    #if defined BOOST_THREAD_USES_DATETIME
-        bool timed_join(const system_time& wait_until); // DEPRECATED
-        template<typename TimeDuration>
-        bool timed_join(TimeDuration const& rel_time); // DEPRECATED
-        static void sleep(const system_time& xt);// DEPRECATED
     #endif
 
-    #if defined BOOST_THREAD_PROVIDES_THREAD_EQ
-        bool operator==(const scoped_thread& other) const; // DEPRECATED
-        bool operator!=(const scoped_thread& other) const; // DEPRECATED
-
-    #endif
-        static void yield() noexcept; // DEPRECATED
 
     };
 
@@ -225,9 +217,9 @@
 thread std::thread destructor terminates the program if the thread is not joinable.
 Having a wrapper that can join the thread before destroying it seems a natural need.
 
-Remark: scoped_thread is not a @c thread as @c thread is not designed to be derived from as a polymorphic type.
+Remark: `scoped_thread` is not a __thread as __thread is not designed to be derived from as a polymorphic type.
 
-Anyway scoped_thread can be used in most of the contexts a @c thread could be used as it has the
+Anyway `scoped_thread` can be used in most of the contexts a __thread could be used as it has the
 same non-deprecated interface with the exception of the construction.
 
 [heading Example]
@@ -277,9 +269,9 @@
 [[Effects:] [Transfers ownership of the scoped_thread managed by `other` (if
 any) to `*this`. 
 
-_ if defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE: If there was a scoped_thread previously associated with `*this` then that scoped_thread is detached, DEPRECATED
+- if defined `BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE`: If there was a `scoped_thread` previously associated with `*this` then that `scoped_thread` is detached, DEPRECATED
 
-- if defined BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE: If the scoped_thread is joinable calls to std::terminate.
+- if defined `BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE`: If the `scoped_thread` is joinable calls to std::terminate.
 ]]
 
 [[Postconditions:] [`other->get_id()==thread::id()` and `get_id()` returns the value of `other.get_id()` prior to the assignment.]]
@@ -296,7 +288,7 @@
 
 [variablelist
 
-[[Effects:] [move the thread to own @c t.]]
+[[Effects:] [move the thread to own `t_`.]]
 
 [[Postconditions:] [`*this.t_` refers to the newly created thread of execution and `this->get_id()!=thread::id()`.]]
 
@@ -315,7 +307,7 @@
 
 [[Effects:] [Equivalent to `CallableThread()(t_)`.  ]]
 
-[[Throws:] [Nothing]]
+[[Throws:] [Nothing: The `CallableThread()(t_)` should not throw when joining the thread as the scoped variable is on a scope outside the thread function.]]
 
 ]
 
@@ -345,8 +337,6 @@
 
 [[Effects:] [Equivalent to t_.join().]]
 
-]]
-
 ]
 
 [endsect]
Modified: branches/release/libs/thread/doc/shared_mutex_ref.qbk
==============================================================================
--- branches/release/libs/thread/doc/shared_mutex_ref.qbk	(original)
+++ branches/release/libs/thread/doc/shared_mutex_ref.qbk	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -45,7 +45,7 @@
         void unlock_upgrade_and_lock_shared();
     #endif
 
-    #if defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 || defined BOOST_THREAD_DONT_USE_CHRONO
+    #if defined BOOST_THREAD_USES_DATETIME
         bool timed_lock_shared(system_time const& timeout);
         bool timed_lock(system_time const& timeout);
     #endif
Modified: branches/release/libs/thread/doc/thread_ref.qbk
==============================================================================
--- branches/release/libs/thread/doc/thread_ref.qbk	(original)
+++ branches/release/libs/thread/doc/thread_ref.qbk	2013-01-01 04:41:02 EST (Tue, 01 Jan 2013)
@@ -547,7 +547,7 @@
 [[Effects:] [Transfers ownership of the thread managed by `other` (if
 any) to `*this`. 
 
-_ if defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE: If there was a thread previously associated with `*this` then that thread is detached, DEPRECATED
+- if defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE: If there was a thread previously associated with `*this` then that thread is detached, DEPRECATED
 
 - if defined BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE: If the thread is joinable calls to std::terminate.
 ]]
@@ -755,13 +755,18 @@
 
 [[Effects:] [If `*this` refers to a thread of execution, waits for that thread of execution to complete.]]
 
+[[Synchronization:] [The completion of the thread represented by `*this` synchronizes with the
+corresponding successful `join()` return. ]]
+[[Note:] [Operations on *this are not synchronized.
+ ]]
+
 [[Postconditions:] [If `*this` refers to a thread of execution on entry, that thread of execution has completed. `*this` no longer refers to any thread of execution.]]
 
 [[Throws:] [__thread_interrupted__ if the current thread of execution is interrupted or `system_error`]]
 
 [[Error Conditions:] [
 
-[*resource_deadlock_would_occur]: if deadlock is detected or `this->get_id() == boost::this_thread::get_id()` and `BOOST_THREAD_TRHOW_IF_PRECONDITION_NOT_SATISFIED` is defined..
+[*resource_deadlock_would_occur]: if deadlock is detected or `this->get_id() == boost::this_thread::get_id()`.
 
 [*invalid_argument]: if the thread is not joinable and `BOOST_THREAD_TRHOW_IF_PRECONDITION_NOT_SATISFIED` is defined.