Многопоточность в Windows 7 и Windows XP - приложение Delphi работает неправильно - PullRequest
1 голос
/ 22 декабря 2010

У меня проблема с приложением Delphi Pro 6, которое я написал на своем компьютере с Windows XP, когда оно работает в Windows 7. У меня еще нет Windows 7 для тестирования, и я пытаюсь проверить, есть ли Windows 7 может быть источником проблемы. Есть ли принципиальная разница между тем, как Windows 7 обрабатывает потоки, по сравнению с Windows XP? Я наблюдаю, как что-то происходит не по порядку в журналах ошибок в Windows 7, и это вызывает проблемы. Например, объекты, которые должны были быть инициализированы, неинициализируются при запуске в Windows 7, но эти объекты инициализируются в Windows XP к тому времени, когда они необходимы.

Некоторые вопросы:

1) Существуют ли какие-либо различия в ядре, которые могут привести к разному поведению потоков / процессов в двух версиях операционной системы?

2) Я знаю, что следующий вопрос может показаться абсурдным, но пытается ли Windows 7 разделить / разветвить потоки, которые не разделены / разветвлены в Windows XP?

3) И наконец, есть ли известные проблемы с обработкой FPU, которые могут вызвать проблемы с программами XP при запуске в Windows 7 из-за операционных различий в обработке состояний ожидания или хранении реестра, или, возможно, что-то вроде настроек маски исключения и т. Д.?

4) Есть ли проблемы с 32-разрядными и 64-разрядными, которые могут создавать проблемы здесь?

5) Я использую несколько потоков, но фоновые потоки полностью защищены критическими разделами. Любые различия здесь, о которых я должен беспокоиться?

- Рошлер

1 Ответ

1 голос
/ 22 декабря 2010

Начиная с Windows XP, Microsoft изменила способ освобождения блокировок, чтобы они не обязательно переходили к следующему ожидающему потоку в порядке FIFO.Вполне возможно, что это изменение могло выявить состояние гонки в вашем коде, которое не отображалось в XP.

Некоторые подробности можно найти в блоге Джо Даффи здесь: Антиконвойные блокировки в Windows Server2003 SP1 и Windows Vista

(К сожалению, я не смог найти настоящую статью, размещенную на MS - похоже, об этом следует упомянуть в какой-то статье KB или что-то в этом роде)

...