ACE_Message_QueueACE_MT_SYNCH::putq ()使用时需要注意的地方
函数声明
template<ACE_SYNCH_DECL >
int ACE_Task< ACE_SYNCH_DECL >::putq ( ACE_Message_Block * ,ACE_Time_Value * timeout = 0 )
timeout参数
timeout参数使用绝对时间,而不是相对时间。使用时我们可以使用ACE_OS::gettimeofday ()获取系统当前时间,再加上一个相对时间来确定超时时间。
ACE_Message_Block::duplicate ()的使用
ACE_Message_Block *mb;
……
……
if (test_task->putq (mb->duplicate (), timeout) < 0)
{mb->release ();
}mb->release ();
上面的代码在正常情况下不会引起问题。在正常情况下,程序可能运行很多年都不会发现什么问题,但却隐含着一个不容易出现的小问题。代码作者认为,在入队列前先增加了数据块的引用计数,入队成功后,减少1次引用计数,取队列的代码最终再使用完MB后再次release ()降低引用计数时,即可释放数据块;如果入队失败了,在if块中降低1次引用计数,在外面再release一次会释放数据块。实际上这时候悲剧就发生了。if块中的确会降低数据块的引用计数,但同时会设置自己对数据块的指针为0。再次release虽然程序不会报错,但内存却泄露了。因为duplicate浅拷贝,会动态分配一个ACE_Message_Block对象,这个对象中保留着对数据块的引用计数,因此数据块和浅拷贝动态分配的ACE_Message_Block都得不到释放。
这个问题隐藏的比较深,if块在正常的逻辑流程中不会走到。
ACE_Message_QueueACE_MT_SYNCH::putq ()使用时需要注意的地方相关推荐
- SqlHelper.cs 使用时要注意的地方
在使用SqlHelper.cs 编写数据访问层时如果你这样写: SqlHelper.ExecuteScalar(DBH.ConnStr, "UserClass_CheckClassId&qu ...
- android判断点击次数_Android应用统计-使用时长及次数统计(一)
关键字: 应用统计 Android源码 应用使用时长 应用使用次数 最近在做有关于应用统计有关的工作,主要是统计系统中客户端应用(非系统自带的那些基础应用,比如DownLoadManager),在每一 ...
- 基于模板的通用代码生成器LKGenerator(二)-使用时的关键步骤,注意事项及实例
通过本文,您将了解本代码生成器使用时的关键步骤,使用时的注意事项及实例. 本代码生成器的原理:提供一个可被jvm加载的class文件,然后通过java的注解和反射技术读取信息,通过本工具放入到Velo ...
- struts的比较标签,在使用时,与测试时需要留心。
大于:<logic:greaterThan> 大于等于:<logic:greaterEqual> 小于:<lessThan> 小于等于:<lessEqual& ...
- ThreadLocal使用时因线程复用导致数据混乱分析
ThreadLocal使用时因线程复用导致数据混乱分析 本文主要阐述使用ThreadLocal遇到数据混乱情况下的具体分析和解决过程 ThreadLocal原理 网上有很多介绍,不做详细介绍主要有四个 ...
- mysql varchar 单引号_char、varchar数据类型值在使用时可以要用单引号或双引号括起来。...
[单选题]幼儿主要的活动方式是( ) [单选题]在CREATE TABLE语句中,通常使用( ) 关键字来指定主键. [简答题]传统密码 [单选题]收集资料的目的不包括 [单选题]阅读课文p100第三 ...
- Android应用统计-使用时长及次数统计(一)
关键字: 应用统计 Android源码 应用使用时长 应用使用次数 最近在做有关于应用统计有关的工作,主要是统计系统中客户端应用(非系统自带的那些基础应用,比如DownLoadManager),在每一 ...
- 本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止
Oracle本地有环境,搭建本地环境之后,一直是好的,突然有一次改了IP,然后启动oracle监听时候,就报错了:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后 ...
- jadx-gui 1.4.5使用时遇到的问题
jadx-gui 1.4.5使用时遇到的问题 解决方案可直接跳到"二.设置首选项" 文章目录 jadx-gui 1.4.5使用时遇到的问题 前言 一.问题现象 1.根源所在 2.表 ...
最新文章
- 码易众包:软件开发众包的未来不能只靠等待和呐喊
- MyEclipse 中修改JSP模板
- 正则表达式的一点说明
- Java 使用枚举类的实例
- IOS开发基础之屏幕组件适配添加约束
- 让窗体获得焦点,一定会有您用到的时候
- java.nio.DirectByteBuffer管理堆外内存
- sql server 入门_SQL Server中的数据挖掘入门
- Visual Studio Code远程开发配置
- 英国政府寻求在2022年成为“全球性网络力量”
- android scrollow嵌套listview,excel 中IDEX和MATCH函数嵌套应用.doc
- OpenCV图像处理(7)——图像上写TEXT
- 通过命令行启动uwp应用
- Django 文件下载
- 【记Unexpected token】
- 部门换届推文文字_宿委会换届表彰大会!!!
- android 高德地图全套,android快速集成高德地图
- python 抓网卡数据包 解析wifi_某高校校园网WIFI嗅探用户名密码实践
- 【工具安装】Quartus II 安装与驱动
- 上位机plc编程入门_plc编程入门-看完你就懂了