CLightLock:一个简单AutoLock

原理:

标准的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
原文地址:https://www.cnblogs.com/runnyu/p/cpp.html