lean cpp library
A lean C++ library providing efficient utility classes for high-performance C++ applications.
|
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