首先假设对于一个mutex互斥器对象,有lock以及unlock两个函数可用:
1 void lock(Mutex * pm); 2 void unlock(Mutex * pm);
那么为了防止资源忘记被释放,首先得想法就是创建一个RAII类来进行资源的管理,像下面这样:
1 class Lock{ 2 explicit Lock(Mutex * mutex) 3 :mtx(mutex){} 4 ~Lock(){unlock(mtx)} 5 private: 6 Mutex * mtx; 7 };
然后再用户想要使用的时候就应该这样的使用:
1 func(mutex mtx) 2 ... 3 { 4 Lock m1(&mtx); 5 } 6 ...
1 private: 2 shared_ptr<Mutex> pMtx;
1 class Lock{ 2 public: 3 explicit(Mutex * pm) 4 :pMutex(pm, unlock) 5 {lock(pMutex.get());}//这里的get要引起注意啊 6 private: 7 shared_ptr<Mutex> pMutex; 8 };
原文:http://www.cnblogs.com/-wang-cheng/p/4856729.html