如何使用锁很简单,但是如何用好锁就很困难了,当线程很多的时候总是由于自己忘记了初始化,忘记了调用解锁,或者由于程序异常而出现没有正常解锁的情况,导致庞大的程序出现各种问题,最常见的就是死了,而不是崩溃了。
下面根据我看到的webrtc代码,将webrtc的思想抽出来分享给大家,原来我曾在c++程序设计语言看到过这种思想,但是一直没当回事,感觉太小case了,大的项目谁会这样用,多写了多少代码呀。
主要有两个东西:
1,scopted_ptr,这个我前面介绍过
2,局部对象管理资源,实际上也介绍过。仍然类似于栈管理堆的思想。
有一个锁类CriticalSectionWrapper,见上文的webrtc的锁,它有一个工厂方法创建一个锁,返回指向锁的指针。
方法1:
class MyClass
{
private:
CriticalSectionWrapper* critsec;
}
void MyClass::FuncNeedToHaveLock()
{
critsec->Enter();
//.....code
critsec->Leave();
}
critsec这个锁指针会在MyClass类的构造函数分配内存,析构函数释放内存。
方法二:
对于堆资源的管理,可以采用智能指针,它