1

该应用程序是在 VC++ 6.0 中开发的。当它与它的依赖服务一起在多线程和多处理器环境中运行时,其中一个依赖服务在尝试一些字符串操作(如字符串格式或字符串复制)时崩溃。然而,这在单处理器环境中没有观察到,并且调用堆栈通常看起来像这样

mfc42u!CFixedAlloc::Alloc+82 005b5b64 00000038 005b5b64

mfc42u!CString::AllocBuffer+3f 00000038 00000038 005b5b64

mfc42u!CString::AllocBeforeWrite+31 00000038 0a5bfdbc 005b5b64

mfc42u!CString::AssignCopy+13 00000038 057cb83f 0a5bfe90

mfc42u!CString::operator=+4b

任何人都面临过这样的问题。

4

1 回答 1

1

当一个不是为多线程环境开发或测试的应用程序突然被置于多线程环境中时,这是正常的。

事实上,这只是违反假设的简单问题。毫无疑问,代码是在假设一次只有一个线程会执行它的情况下编写的。如果你违反了这些假设,那么事情就不那么好了。

解决方案是不违反假设:确保一次只有一个线程可以执行代码。

于 2009-07-11T12:13:25.333 回答