极光炫影 » 日志 » 关于MFC、STL、ATL的线程安全问题
关于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,
我没有试验过,
不过我想它应该也有这个问题吧...
想看一下我写的那个无聊的游戏?呵呵,请点击这里吧!我在不断完善中...
最新评论
-
2006-07-30 23:09:36
写的还是蛮清爽的,呵呵,有空我也去写一个!不过KY之前是不可能拉,等KY以后推出KY成功版,呵呵
恩
希望大家都能写考研成功版
嘿嘿 -
2006-07-30 23:31:15
http://free.ys168.com/?feng5166
这里有我一年前的俄罗斯方块,呵呵恩
看看去
我的俄罗斯方块在我7月初回家的时候被我扼杀在摇篮中了...
回来了,
写得不错,
晕,
关于对话框上面的超链接写着是HZIEE,
但是怎么会链接到湖南农业大学的?!
太不爱学校了,
还是...
莫非湖南农业大学是你考研的目标?!
改一下吧~ -
2008-02-04 06:53:16 匿名 60.180.*.*
ATL是线程安全的
至少写COM的时候是这样的我不同意你的观点,
实现线程安全必然带来一定的性能损失的,
所以实现线程安全一般是人为加锁或者采用Lock-Free技术
