Index: boost/detail/lwm_nop.hpp =================================================================== --- boost/detail/lwm_nop.hpp (revision 48989) +++ boost/detail/lwm_nop.hpp (working copy) @@ -28,6 +28,9 @@ public: typedef lightweight_mutex scoped_lock; + void lock() {} + bool try_lock() {return true;} + void unlock() {} }; } // namespace detail Index: boost/detail/lwm_win32_cs.hpp =================================================================== --- boost/detail/lwm_win32_cs.hpp (revision 48989) +++ boost/detail/lwm_win32_cs.hpp (working copy) @@ -91,14 +91,29 @@ explicit scoped_lock(lightweight_mutex & m): m_(m) { - EnterCriticalSection(&m_.cs_); + m_.lock(); } ~scoped_lock() { - LeaveCriticalSection(&m_.cs_); + m_.unlock(); } }; + + void lock() + { + EnterCriticalSection(&cs_); + } + + bool try_lock() + { + return TryEnterCriticalSection(&cs_); + } + + void unlock() + { + EnterCriticalSection(&cs_); + } }; } // namespace detail Index: boost/detail/lwm_pthreads.hpp =================================================================== --- boost/detail/lwm_pthreads.hpp (revision 48989) +++ boost/detail/lwm_pthreads.hpp (working copy) @@ -60,23 +60,38 @@ { private: - pthread_mutex_t & m_; + lightweight_mutex & m_; scoped_lock(scoped_lock const &); scoped_lock & operator=(scoped_lock const &); public: - scoped_lock(lightweight_mutex & m): m_(m.m_) + scoped_lock(lightweight_mutex & m): m_(m) { - pthread_mutex_lock(&m_); + m_.lock(); } ~scoped_lock() { - pthread_mutex_unlock(&m_); + m_.unlock(); } }; + + void lock() + { + pthread_mutex_lock(&m_); + } + + bool try_lock() + { + return pthread_mutex_trylock(&m_) == 0; + } + + void unlock() + { + pthread_mutex_unlock(&m_); + } }; } // namespace detail