找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5139|回复: 3

客户端软件,小心使用ACE_Singleton

[复制链接]
发表于 2008-7-15 23:49:25 | 显示全部楼层 |阅读模式
近日使用ACE开发了客户端软件,测试出现一个重入的BUG,客户端注销后,再次进入会导致状态错误。经过跟踪分析发现,是使用ACE_Singleton引起的。
    因为ACE_Singleton使用非常便利,在程序里面使用了多个,但因为它是系统管理的,在注销后,这个对象无法释放,导致状态全部错误。改成ACE_Unmanaged_Singleton,自己管理对象的生命期就好了。
    请大家注意别犯类似错误啊。
 楼主| 发表于 2008-7-15 23:49:41 | 显示全部楼层
还有另外一个需要注意的事情 - 线程同步如果客户端需要反复调用你用ACE开发的组件,千万注意线程同步。
比如客户端的进入和退出,都调用了ACE的功能,而这个进入退出时间间隔很短,甚至迅速发生,一定要注意里面的线程要保证同步,该退出的退出。否则因为OS调度的缘故,很可能造成很奇怪的错误,其实都是线程不同步带来的。
发表于 2008-8-12 15:48:05 | 显示全部楼层
客户端注销时,进程没退出么,如果进程结束的话就会释放singleton。如果要在进程不退出的情况下反复登录注销并使用同一singleton,需要每个客户端登录时重置(重新初始化)下该singleton。
singleton的语义就是与整个进程同生命周期的,如果每次客户端登陆都新生成一次,注销时再释放一次,就不符合singleton的语义了。
发表于 2008-8-12 16:43:41 | 显示全部楼层
认可。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 22:46 , Processed in 0.021709 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表