lean cpp library
A lean C++ library providing efficient utility classes for high-performance C++ applications.
shareable_lock_policies.h
00001 /*****************************************************/
00002 /* lean Concurrent              (c) Tobias Zirr 2011 */
00003 /*****************************************************/
00004 
00005 #ifndef LEAN_CONCURRENT_SHAREABLE_LOCK_POLICIES
00006 #define LEAN_CONCURRENT_SHAREABLE_LOCK_POLICIES
00007 
00008 #include "../lean.h"
00009 
00010 namespace lean
00011 {
00012 namespace concurrent
00013 {
00014 
00016 template <class Lockable>
00017 struct shared_lock_policy
00018 {
00020     static LEAN_INLINE bool try_lock(Lockable &lock)
00021     {
00022         return lock.try_lock_shared();
00023     }
00025     static LEAN_INLINE void lock(Lockable &lock)
00026     {
00027         lock.lock_shared();
00028     }
00030     static LEAN_INLINE void unlock(Lockable &lock)
00031     {
00032         lock.unlock_shared();
00033     }
00034 };
00035 
00037 template <class Lockable>
00038 struct upgrade_lock_policy
00039 {
00041     static LEAN_INLINE bool try_lock(Lockable &lock)
00042     {
00043         return lock.try_upgrade_lock();
00044     }
00046     static LEAN_INLINE void lock(Lockable &lock)
00047     {
00048         lock.upgrade_lock();
00049     }
00051     static LEAN_INLINE void unlock(Lockable &lock)
00052     {
00053         lock.downgrade_lock();
00054     }
00055 };
00056 
00057 } // namespace
00058 
00059 using concurrent::shared_lock_policy;
00060 using concurrent::upgrade_lock_policy;
00061 
00062 } // namespace
00063 
00064 #endif