关于MFC、STL、ATL的线程安全问题

极光炫影 发表于 2006-07-30 01:19:13

STL我在搞ACM/ICPC的时候用得很多,
对它的特点也比较清楚,
有一个很明显的问题是,
STL在设计的时候是不考虑多线程编程问题的,
所以当今能得到的STL库一般不是线程安全的,
这就要求STL的使用者在开发多线程应用的时候手工解决这个问题,
在Windows下可以使用互斥信号量、临界区等。
不过除了在ACM比赛中,
平时一般不用这个类库。

最近由于长时间考研复习,
I'm on the verge of breaking down,
想干点轻松的事情调节一下,
就写了一个小游戏程序。
其中,
我使用了MFC的CList类,
本来我想MFC虽然出现比STL早,
而且很多类似的类的效率不如STL,
但是作为微软上一代经典的产品,
应该考虑到线程安全的。
可是事实证明,
我好像错了,
我用一个工作线程对一个CList对象进行GetAt、GetNext和RemoveAt操作,
然后同时GUI主线程也对这个对象进行AddTail操作,
结果该程序在运行的过程中偶而会出现断言中断,
跟踪进入一看,
发现CList类RemoveAt函数的源代码(VS2005版本)中,
pOldNode存放了一个无效指针...
两段对于CList对象进行的操作的代码我检查了,
应该没有什么逻辑问题的!
所以可见,
MFC至少某些类不是线程安全的!

至于ATL,
我没有试验过,
不过我想它应该也有这个问题吧...

想看一下我写的那个无聊的游戏?呵呵,请点击这里吧!我在不断完善中...

关键词(Tag): stl mfc 线程安全 atl


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论


  • 枫之羽
    2006-07-30 23:09:36

    写的还是蛮清爽的,呵呵,有空我也去写一个!不过KY之前是不可能拉,等KY以后推出KY成功版,呵呵


    希望大家都能写考研成功版
    嘿嘿


  • 枫之羽
    2006-07-30 23:31:15

    http://free.ys168.com/?feng5166
    这里有我一年前的俄罗斯方块,呵呵  


    看看去
    我的俄罗斯方块在我7月初回家的时候被我扼杀在摇篮中了...

    回来了,
    写得不错,
    晕,
    关于对话框上面的超链接写着是HZIEE,
    但是怎么会链接到湖南农业大学的?!
    太不爱学校了,
    还是...
    莫非湖南农业大学是你考研的目标?!
    改一下吧~


  • zjfc3
    2008-02-04 06:53:16 匿名 60.180.*.*

    ATL是线程安全的
    至少写COM的时候是这样的

    我不同意你的观点,
    实现线程安全必然带来一定的性能损失的,
    所以实现线程安全一般是人为加锁或者采用Lock-Free技术

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定