原理:
标准的RAII,
利用构造函数进行加锁,利用析构函数进行解锁。
1 #ifndef _C_LIGTHT_LOCK_HPP 2 #define _C_LIGTHT_LOCK_HPP 3 4 class CLightLock 5 { 6 public: 7 CLightLock() 8 { 9 pthread_mutexattr_t attr; 10 pthread_mutexattr_init(&attr); 11 pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE_NP); 12 pthread_mutex_init(&_lock,&attr); 13 pthread_mutexattr_destroy(&attr); 14 } 15 virtual ~CLightLock() 16 { 17 pthread_mutex_destroy(&_lock); 18 } 19 inline void lock() 20 { 21 pthread_mutex_lock(&_lock) 22 } 23 inline void unlock() 24 { 25 pthread_mutex_unlock(&_lock); 26 } 27 private: 28 CLightLock( const CLightLock& ) 29 { 30 } 31 pthread_mutex_t _lock; 32 }; 33 34 template<typename LOCK> 35 class CAutoLockT 36 { 37 public: 38 inline CAutoLockT( LOCK* lock ) 39 :_lock(lock) 40 { 41 _lock->lock(); 42 } 43 inline CAutoLockT( LOCK& lock ) 44 :_lock(&lock) 45 { 46 _lock->lock(); 47 } 48 inline virtual ~CAutoLockT() 49 { 50 _lock->unlock(); 51 } 52 private: 53 CAutoLockT( const CAutoLockT& ) 54 { 55 } 56 LOCK* _lock; 57 }; 58 59 typedef CAutoLockT<CLightLock> CAutoLightLock; 60 } 61 62 #endif