/usr/include/boost/thread
NameSizeModeActions
concurrent_queues/-0755rm
csbl/-0755rm
detail/-0755rm
executors/-0755rm
experimental/-0755rm
futures/-0755rm
pthread/-0755rm
v2/-0755rm
win32/-0755rm
barrier.hpp74210644editdlrm
caller_context.hpp15260644editdlrm
completion_latch.hpp65790644editdlrm
condition.hpp4900644editdlrm
condition_variable.hpp6340644editdlrm
cv_status.hpp5310644editdlrm
exceptional_ptr.hpp10980644editdlrm
exceptions.hpp62860644editdlrm
executor.hpp4760644editdlrm
externally_locked.hpp107920644editdlrm
externally_locked_stream.hpp47840644editdlrm
future.hpp2037920644editdlrm
interruption.hpp5960644editdlrm
is_locked_by_this_thread.hpp10620644editdlrm
latch.hpp49670644editdlrm
lockable_adapter.hpp60430644editdlrm
lockable_concepts.hpp41140644editdlrm
lockable_traits.hpp78530644editdlrm
locks.hpp5720644editdlrm
lock_algorithms.hpp132010644editdlrm
lock_concepts.hpp47920644editdlrm
lock_factories.hpp23170644editdlrm
lock_guard.hpp22900644editdlrm
lock_options.hpp7010644editdlrm
lock_traits.hpp12340644editdlrm
lock_types.hpp344180644editdlrm
mutex.hpp11660644editdlrm
null_mutex.hpp63460644editdlrm
once.hpp13240644editdlrm
ostream_buffer.hpp9250644editdlrm
poly_lockable.hpp21000644editdlrm
poly_lockable_adapter.hpp21240644editdlrm
poly_shared_lockable.hpp58070644editdlrm
poly_shared_lockable_adapter.hpp47920644editdlrm
recursive_mutex.hpp15350644editdlrm
reverse_lock.hpp13160644editdlrm
scoped_thread.hpp85470644editdlrm
shared_lock_guard.hpp11920644editdlrm
shared_mutex.hpp14000644editdlrm
strict_lock.hpp62460644editdlrm
synchronized_value.hpp311100644editdlrm
sync_bounded_queue.hpp5950644editdlrm
sync_queue.hpp5710644editdlrm
testable_mutex.hpp39250644editdlrm
thread.hpp3850644editdlrm
thread_functors.hpp13660644editdlrm
thread_guard.hpp10690644editdlrm
thread_only.hpp8030644editdlrm
thread_pool.hpp5310644editdlrm
thread_time.hpp15900644editdlrm
tss.hpp26030644editdlrm
user_scheduler.hpp52220644editdlrm
with_lock_guard.hpp60520644editdlrm
xtime.hpp23900644editdlrm
Edit: /usr/include/boost/thread/externally_locked.hpp (10792B)
// (C) Copyright 2012 Vicente J. Botet Escriba // 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) #ifndef BOOST_THREAD_EXTERNALLY_LOCKED_HPP #define BOOST_THREAD_EXTERNALLY_LOCKED_HPP #include #include #include #include #include #include #include #include #include #include #include namespace boost { class mutex; /** * externally_locked cloaks an object of type T, and actually provides full * access to that object through the get and set member functions, provided you * pass a reference to a strict lock object */ //[externally_locked template class externally_locked; template class externally_locked { //BOOST_CONCEPT_ASSERT(( CopyConstructible )); BOOST_CONCEPT_ASSERT(( BasicLockable )); public: typedef MutexType mutex_type; BOOST_THREAD_COPYABLE_AND_MOVABLE( externally_locked ) /** * Requires: T is a model of CopyConstructible. * Effects: Constructs an externally locked object copying the cloaked type. */ externally_locked(mutex_type& mtx, const T& obj) : obj_(obj), mtx_(&mtx) { } /** * Requires: T is a model of Movable. * Effects: Constructs an externally locked object by moving the cloaked type. */ externally_locked(mutex_type& mtx, BOOST_THREAD_RV_REF(T) obj) : obj_(move(obj)), mtx_(&mtx) { } /** * Requires: T is a model of DefaultConstructible. * Effects: Constructs an externally locked object initializing the cloaked type with the default constructor. */ externally_locked(mutex_type& mtx) // BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(T())) : obj_(), mtx_(&mtx) { } /** * Copy constructor */ externally_locked(externally_locked const& rhs) //BOOST_NOEXCEPT : obj_(rhs.obj_), mtx_(rhs.mtx_) { } /** * Move constructor */ externally_locked(BOOST_THREAD_RV_REF(externally_locked) rhs) //BOOST_NOEXCEPT : obj_(move(rhs.obj_)), mtx_(rhs.mtx_) { } /// assignment externally_locked& operator=(externally_locked const& rhs) //BOOST_NOEXCEPT { obj_=rhs.obj_; mtx_=rhs.mtx_; return *this; } /// move assignment externally_locked& operator=(BOOST_THREAD_RV_REF(externally_locked) rhs) // BOOST_NOEXCEPT { obj_=move(BOOST_THREAD_RV(rhs).obj_); mtx_=rhs.mtx_; return *this; } void swap(externally_locked& rhs) //BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR) { swap(obj_, rhs.obj_); swap(mtx_, rhs.mtx_); } /** * Requires: The lk parameter must be locking the associated mtx. * * Returns: The address of the cloaked object.. * * Throws: lock_error if BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED is not defined and the lk parameter doesn't satisfy the preconditions */ T& get(strict_lock& lk) { BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return obj_; } const T& get(strict_lock& lk) const { BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return obj_; } template T& get(nested_strict_lock& lk) { BOOST_STATIC_ASSERT( (is_same::value)); /*< that locks the same type >*/ BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return obj_; } template const T& get(nested_strict_lock& lk) const { BOOST_STATIC_ASSERT( (is_same::value)); /*< that locks the same type >*/ BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return obj_; } /** * Requires: The lk parameter must be locking the associated mtx. * Returns: The address of the cloaked object.. * * Throws: lock_error if BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED is not defined and the lk parameter doesn't satisfy the preconditions */ template T& get(Lock& lk) { BOOST_CONCEPT_ASSERT(( StrictLock )); BOOST_STATIC_ASSERT( (is_strict_lock::value)); /*< lk is a strict lock "sur parolle" >*/ BOOST_STATIC_ASSERT( (is_same::value)); /*< that locks the same type >*/ BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return obj_; } mutex_type* mutex() const BOOST_NOEXCEPT { return mtx_; } // modifiers void lock() { mtx_->lock(); } void unlock() { mtx_->unlock(); } bool try_lock() { return mtx_->try_lock(); } // todo add time related functions private: T obj_; mutex_type* mtx_; }; //] /** * externally_locked specialization for T& that cloaks an reference to an object of type T, and actually * provides full access to that object through the get and set member functions, provided you * pass a reference to a strict lock object. */ //[externally_locked_ref template class externally_locked { //BOOST_CONCEPT_ASSERT(( CopyConstructible )); BOOST_CONCEPT_ASSERT(( BasicLockable )); public: typedef MutexType mutex_type; BOOST_THREAD_COPYABLE_AND_MOVABLE( externally_locked ) /** * Effects: Constructs an externally locked object storing the cloaked reference object. */ externally_locked(T& obj, mutex_type& mtx) BOOST_NOEXCEPT : obj_(&obj), mtx_(&mtx) { } /// copy constructor externally_locked(externally_locked const& rhs) BOOST_NOEXCEPT : obj_(rhs.obj_), mtx_(rhs.mtx_) { } /// move constructor externally_locked(BOOST_THREAD_RV_REF(externally_locked) rhs) BOOST_NOEXCEPT : obj_(rhs.obj_), mtx_(rhs.mtx_) { } /// assignment externally_locked& operator=(externally_locked const& rhs) BOOST_NOEXCEPT { obj_=rhs.obj_; mtx_=rhs.mtx_; return *this; } /// move assignment externally_locked& operator=(BOOST_THREAD_RV_REF(externally_locked) rhs) BOOST_NOEXCEPT { obj_=rhs.obj_; mtx_=rhs.mtx_; return *this; } void swap(externally_locked& rhs) BOOST_NOEXCEPT { swap(obj_, rhs.obj_); swap(mtx_, rhs.mtx_); } /** * Requires: The lk parameter must be locking the associated mtx. * * Returns: The address of the cloaked object.. * * Throws: lock_error if BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED is not defined and the lk parameter doesn't satisfy the preconditions */ T& get(strict_lock const& lk) { BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return *obj_; } const T& get(strict_lock const& lk) const { BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return *obj_; } template T& get(nested_strict_lock const& lk) { BOOST_STATIC_ASSERT( (is_same::value)); /*< that locks the same type >*/ BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return *obj_; } template const T& get(nested_strict_lock const& lk) const { BOOST_STATIC_ASSERT( (is_same::value)); /*< that locks the same type >*/ BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return *obj_; } /** * Requires: The lk parameter must be locking the associated mtx. * Returns: The address of the cloaked object.. * * Throws: lock_error if BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED is not defined and the lk parameter doesn't satisfy the preconditions */ template T& get(Lock const& lk) { BOOST_CONCEPT_ASSERT(( StrictLock )); BOOST_STATIC_ASSERT( (is_strict_lock::value)); /*< lk is a strict lock "sur parolle" >*/ BOOST_STATIC_ASSERT( (is_same::value)); /*< that locks the same type >*/ BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return *obj_; } /** * Requires: The lk parameter must be locking the associated mtx. * Returns: The address of the cloaked object.. * * Throws: lock_error if BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED is not defined and the lk parameter doesn't satisfy the preconditions */ template T const& get(Lock const& lk) const { BOOST_CONCEPT_ASSERT(( StrictLock )); BOOST_STATIC_ASSERT( (is_strict_lock::value)); /*< lk is a strict lock "sur parolle" >*/ BOOST_STATIC_ASSERT( (is_same::value)); /*< that locks the same type >*/ BOOST_THREAD_ASSERT_PRECONDITION( lk.owns_lock(mtx_), lock_error() ); /*< run time check throw if not locks the same >*/ return *obj_; } mutex_type* mutex() const BOOST_NOEXCEPT { return mtx_; } void lock() { mtx_->lock(); } void unlock() { mtx_->unlock(); } bool try_lock() { return mtx_->try_lock(); } // todo add time related functions protected: T* obj_; mutex_type* mtx_; }; //] template void swap(externally_locked & lhs, externally_locked & rhs) // BOOST_NOEXCEPT { lhs.swap(rhs); } } #include #endif // header