博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSingleLock
阅读量:4113 次
发布时间:2019-05-25

本文共 1077 字,大约阅读时间需要 3 分钟。

上实例代码:

[cpp]   
 
  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.缺点就是性能上总会有损失的,因为它多了一个构造与析构的过程,但对于普通应用来讲,优处大于缺点。

转载地址:http://zlgsi.baihongyu.com/

你可能感兴趣的文章
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>
Spring的单例模式源码小窥
查看>>
后台服务的变慢排查思路(轻量级应用服务器中测试)
查看>>
MySQL中InnoDB事务的默认隔离级别测试
查看>>
微服务的注册与发现
查看>>
bash: service: command not found
查看>>
linux Crontab 使用 --定时任务
查看>>
shell编程----目录操作(文件夹)
查看>>
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>
tomcat 使用心得(问题)-eclipse 启动tomcat 后 浏览器访问404 --eclipse复制工程显示原来的工程名
查看>>
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>