#ifndef __SCOPEDLOCKHOLDER__ #define __SCOPEDLOCKHOLDER__ #include #include #include #include typedef boost::recursive_mutex::scoped_lock ScopedLock; // A lock holder that can be returned and copied by value // When the last reference goes away, the lock is released class SharedScopedLock { protected: mutable boost::shared_ptr mHolder; public: SharedScopedLock(boost::recursive_mutex& mutex) : mHolder(boost::make_shared(boost::ref(mutex))) { ; } void lock() const { mHolder->lock(); } void unlock() const { mHolder->unlock(); } }; // A class that unlocks on construction and locks on destruction class ScopedUnlock { protected: boost::recursive_mutex& mMutex; public: ScopedUnlock(boost::recursive_mutex& mutex) : mMutex(mutex) { mMutex.unlock(); } ~ScopedUnlock() { mMutex.lock(); } private: ScopedUnlock(const ScopedUnlock&); // no implementation ScopedUnlock& operator=(const ScopedUnlock&); // no implementation }; #endif