【整理自用】多线程之CSingleLock

1.CSingleLock简介

总体而言:
1. CSingleLock主要是用于同步多个线程对一个数据类的同时访问。
2. CSingleLock有RAII的好处。


CSingleLock是对锁的一个封装,它的基本原理如下:(下面给出的是CSingleLock的构造函数和析构函数)

CSingleLock(Lock* pLock)
{ 
    pLock->Lock(); 
}
~CSingleLock()
{ 
    pLock->UnLock(); 
}

由上述基本原理可以看出,使用CSingleLock有两大好处:
1.防止编程笔误,只有Lock,没有UnLock。//因为是自动调用的析构函数,所以不必担心程序员使用时操作失误。
2.函数异常退出时,有可能流程走不到UnLock处,会导致资源锁死,而使用CSingleLock,则会在函数出栈时,自动调用CSingleLock析构函数,释放锁。

2.RAII的概念

RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。

RAII 的一般做法是这样的:
1. 在对象构造时获取资源;
2. 接着控制对资源的访问使之在对象的生命周期内始终保持有效
3. 最后在对象析构的时候释放资源。
借此,我们实际上把管理一份资源的责任托管给了一个对象。
这种做法有两大好处:
1. 不需要显式地释放资源。
2. 采用这种方式,对象所需的资源在其生命期内始终保持有效。

因此,CSingleLock有RAII的好处!!!
使用CSingleLock有一大坏处,就是性能上总会有损失的,因为它多了一个构造与析构的过程.
想要多线程同步,创建的对象必然是CSyncObject派生类的对象——它是其他四个同步类的基类。

猜你喜欢

转载自blog.csdn.net/wushuomin/article/details/80002627