1

我在 Windows XP 机器上编写的 Delphi Pro 6 应用程序在 Windows 7 上运行时遇到问题。我还没有要测试的 Windows 7,我正在尝试查看 Windows 7 是否可能是麻烦的根源。与 Windows XP 相比,Windows 7 处理线程的方式是否存在根本区别?我在 Windows 7 上的错误日志中看到事情发生的顺序不正确,这导致了问题。例如,本应初始化的对象在 Windows 7 上运行时未初始化,但这些对象在 Windows XP 上需要时才被初始化。

一些问题:

1) 是否存在任何可能导致线程/进程在两个操作系统版本之间表现不同的核心差异?

2) 我知道下一个问题可能看起来很荒谬,但是 Windows 7 是否会尝试拆分/分叉在 Windows XP 上未拆分/分叉的线程?

3) 最后,由于等待状态处理或寄存器存储的操作差异,或者可能是异常掩码设置等原因,FPU 处理是否存在任何已知问题,这些问题可能导致 XP 程序在 Windows 7 上运行时出现问题?

4) 任何 32 位与 64 位问题可能在这里造成麻烦?

5)我确实使用了多个线程,但后台线程完全受到关键部分的保护。这里有什么我应该关注的差异吗?

——罗施勒

4

1 回答 1

1

自 Windows XP 以来,Microsoft 已经改变了锁的释放方式,因此它们不必按 FIFO 顺序转换到下一个等待线程。此更改可能会在您的代码中显示出在 XP 下未显示的竞争条件。

可以在 Joe Duffy 的博客中找到一些详细信息:Windows Server 2003 SP1 和 Windows Vista 中的反护航锁

(不幸的是,我无法挖掘出真正的 MS 托管文章 - 似乎这应该在某种 KB 文章或其他内容中提及)

于 2010-12-22T05:09:38.543 回答