CSingleLock使用方法

来源:互联网 发布:绘影绘声 mac 编辑:程序博客网 时间:2024/06/04 01:08

先上实例代码:


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);//方法一 //CSingleLock SingleLock(&CritSection); 方法二 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);//方法一 //CSingleLock SingleLock(&CritSection); 方法二 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.缺点就是性能上总会有损失的,因为它多了一个构造与析构的过程,但对于普通应用来讲,优处大于缺点。

0 0
原创粉丝点击