peakzhang 发表于 2007-12-26 22:24:11

双核机上的 ACE 问题

大家写的程序有没有在双核机运行过,结果如何?我先说说我的情况
本人基于ACE写了一个动态库,该库在单核机运行正常,但前几天放在双核机上作测试,发现了不少问题:
1)Proactor 经常出现异常
2)消息块 ACE_Message_Block 的 release() 函数也会偶而出现不该出现的异常
我说的异常一般指内存访问非法C00000005,现在不知道到底什么原因导致这些问题,是ACE的问题还是我的代码写的有问题?各位可把所写的程序放在双核机一测,发表一下看法?

peakzhang 发表于 2007-12-26 22:24:17

首先要明确一条,程序能否正常运行与机器是否是单核还是双核没有任何关系,这是操作系统管理的事件。

一般出现程序在单核机器上能正常运行而在双核上不能正常的原因是多线程访问没有做好同步引起的。在单核机器上多线程本质上还是串行执行的,而在双核机器上,多线程可能实现真正意义上的并行。这样一来,以前的没有做好同步的代码段在双核机器上表现更容易出问题。从理论上讲,在双核上运行和时间有关的多线程问题在单核机器上也会出现,只是出现的机会要小得多而己。这是我这一个月来解决公司项目的一点心得,我们的问题也是和楼主差不多,在单CPU机器上运行比较正常,一般几个月偶尔出现一次程序退出现象,在双CPU机器上程序则频繁退出。经过我和公司另一位同事差不多一个月的努力,现在总算稳定下来了。楼主可以在内存释放的地方加上同步锁看看。我们的项目用到了QT3.2+ACE5.4.6+gcc 3.3.2,所以请楼主放心ACE应该没有问题,请仔细检查ACE的使用方式和程序中的同步问题。

peakzhang 发表于 2007-12-26 22:24:26

楼上几位说的对,确实是由于没有同步好的原因,现在没问题了,谢谢几位!
页: [1]
查看完整版本: 双核机上的 ACE 问题