Ваша проблема, скорее всего, код Fortran.Для кода на Фортране нередко используются общие глобальные переменные состояния, особенно для старого кода.Это всего лишь одна из возможностей, но существует множество других причин, по которым код на Фортране может быть поточно-ориентированным для вашего использования.
Если это действительно проблема, у вас есть несколько вариантов, которые могут помочь:
- Сериализация вызовов кода Фортрана с мьютексом / блокировкой.
- Рефакторинг кода Фортрана для удаления глобального общего состояния, например, перемещения его в стек.
- Сделайте так, чтобы каждый поток использовал отдельный экземпляр библиотеки DLL.
Последний вариант - довольно грубый взлом, но он может быть наиболее эффективным краткосрочным решением.Чтобы организовать отдельные экземпляры, вам просто нужно скопировать и переименовать DLL, чтобы каждый поток загружал DLL с другим именем.Даже если они идентичны, этого достаточно, чтобы убедить Windows загрузить отдельные экземпляры модуля DLL и, следовательно, отдельные экземпляры всех глобальных данных.
Одна заключительная мысль: убедитесь, что вы связываете Фортран с несколькимимногопоточная версия среды исполнения Fortran.