注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

处理锁的使用引起的问题  

2015-04-09 20:26:22|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

处理锁的使用引起的问题

一直在用RAII来封装Mutex的使用,这样地更安全。但是看别人的封装时有这样的代码:

Class BaseLogSource

{

         Public:

                   BaseLogSource(){}

                   Virtual ~BaseLogSource(){}

};

Class LogSource:public BaseLogSource

{

         Public:

                   LogSource(const char*name,int num):filename(name),lineNum(num){}

~LogSource(){}

         Private:

                   Char* filename;

                   Int lineNum;

};

Class BaseLock

{

         Public:

                   BaseLock(pthread_mutext_t &key,LogSource &lsrc){}

                   Virtual ~BaseLock(){}

};

Class MutexLock:public BaseLock

{

         Public:

                   //这行打开引起错误“IntelliSense: "TestRef::TestRef()" 未提供初始值设定项       

                   //MutexLock();                  

MutexLock(pthread_mutext_t &key,LogSource& lsrc);

                   ~MutexLock();

         Private:

                   Pthread_mutext_t & theKey;

                   LogSource &src;

};

 

如果使用默认的构造函数则会引发这个错误:error C2512: TestRef: 没有合适的默认构造函数可用

其实原因非常简单,引用啊,你得赋值,这玩意儿是不能单独使用的。

调用方式:

{

         MutexLock myLock(theKey,LogSource(__FILE__,__LINE__));

}

 

另外还有一个问题,如果这么使用,将其的应用环境变成高速循环下的调用,会不会产生开销,开销有多大?

这个还真没有测试过,看下面的例子:

For (int num = 0;num < 1000000;num++)

{

         MutextLock(key,src);

         Count++;

}

这个是从《提高C++编程的性能的编程技术》上抄来的,他的测试结果是1.621.01秒钟的区别,也就是说,上面的有继承的是1.62秒,没有继承和直接使用锁的是1.01秒。

这个可以说是在不同的环境下就会产生设计是否合理的差别,所以说,没有最好的设计架构,只有最合适的设计架构。

  评论这张
 
阅读(243)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017