CSingleLock

来源:互联网 发布:servlet 接收json 编辑:程序博客网 时间:2024/06/15 20:58

上实例代码:


[cpp] view plain copy
 print?
  1. class CDataArray  
  2. {  
  3. private:  
  4.  int iArray[10];  
  5.     CMutex Mutex;  
  6.     CCriticalSection CritSection;  
  7. public:  
  8.     CDataArray(){};  
  9.     ~CDataArray(){};  
  10.   
  11.     void SetData(int iValue);  
  12.     void GetDataArray(int aArray[10]);  
  13. };  
  14.   
  15. void CDataArray::SetData(int iValue)  
  16. {  
  17.  CSingleLock SingleLock(&Mutex);//方法一  
  18.  //CSingleLock SingleLock(&CritSection); 方法二  
  19.  SingleLock.Lock();  
  20.  if(SingleLock.IsLocked()){  
  21.  for (int i=0;i<10;i++)  
  22.   iArray[i]=iValue;  
  23.  }  
  24.  Lock.Unlock();//此步也可以进行省略  
  25. }  
  26.   
  27. void CDataArray::GetDataArray(int aArray[10])  
  28. {  
  29.  CSingleLock SingleLock(&Mutex);//方法一  
  30.  //CSingleLock SingleLock(&CritSection); 方法二  
  31.  SingleLock.Lock();  
  32.  if(SingleLock.IsLocked()){  
  33.  for (int i=0;i<10;i++)  
  34.   aArray[i]=iArray[i];  
  35.  }  
  36.  Lock.Unlock();//此步也可以进行省略  
  37. }  

一、使用CSingleLock通过对互斥的控制达到共享资源的互斥访问;如果一个线程占正在访问互斥,那么系统将挂起当前的调用线程,直到这个互斥被释放为止,这时,被挂起的线程将被唤醒并取得对互斥的控制;一般来说使用锁需要Lock,Unlock两步,而使用CSingleLock时,只需要一步即可,即在函数内部,声明一个CSingleLock,同时指定互斥对象的指针,在函数执行完毕的时候,会自动执行CSingleLock的析构函数,从而解锁。

二、优缺点
1.防止编程时的笔误,只有Lock,没有UnLock。
2.函数异常退出时,有可能流程走不到UnLock处,会导致资源锁死,而使CSingleLock,则会在函数出栈时,自动调用CSingleLock析构函数。
3.缺点就是性能上总会有损失的,因为它多了一个构造与析构的过程,但对于普通应用来讲,优处大于缺点。