本文共 1077 字,大约阅读时间需要 3 分钟。
上实例代码:
- class CDataArray
- {
- private:
- int iArray[10];
- CMutex Mutex;
- CCriticalSection CritSection;
- public:
- CDataArray(){};
- ~CDataArray(){};
-
- void SetData(int iValue);
- void GetDataArray(int aArray[10]);
- };
-
- void CDataArray::SetData(int iValue)
- {
- CSingleLock SingleLock(&Mutex);
-
- SingleLock.Lock();
- if(SingleLock.IsLocked()){
- for (int i=0;i<10;i++)
- iArray[i]=iValue;
- }
- Lock.Unlock();
- }
-
- void CDataArray::GetDataArray(int aArray[10])
- {
- CSingleLock SingleLock(&Mutex);
-
- SingleLock.Lock();
- if(SingleLock.IsLocked()){
- for (int i=0;i<10;i++)
- aArray[i]=iArray[i];
- }
- Lock.Unlock();
- }
一、 使用CSingleLock通过对互斥的控制达到共享资源的互斥访问;如果一个线程占正在访问互斥, 那么系统将挂起当前的调用线程,直到这个互斥被释放为止,这时,被挂起的线程将被唤醒并取得对互斥的控制; 一般来说使用锁需要Lock,Unlock两步,而使用CSingleLock时,只需要一步即可,即在函数内部,声明一个CSingleLock, 同时指定互斥对象的指针,在函数执行完毕的时候,会自动执行CSingleLock的析构函数,从而解锁。
二、优缺点 1.防止编程时的笔误,只有Lock,没有UnLock。 2.函数异常退出时,有可能流程走不到UnLock处,会导致资源锁死,而使CSingleLock,则会在函数出栈时,自动调用CSingleLock析构函数。 3.缺点就是性能上总会有损失的,因为它多了一个构造与析构的过程,但对于普通应用来讲,优处大于缺点。
转载地址:http://zlgsi.baihongyu.com/