我有一个c#windows服务启动几个线程,然后每个线程从使用intel fortran 9编译的静态dll库执行相同的fortran函数。
当发生这种情况时,第一个函数保持正常运行,而另一个函数触发c#异常。
是否有任何编译器选项可以修复它?我google了很多,只找到递归和保存。我明天要在办公室测试一下,但我并不乐观。
PS:fortran代码有模块
谢谢!
答案 0 :(得分:3)
您的问题很可能是Fortran代码。 Fortran代码使用共享全局状态变量的情况并不少见,特别是对于旧代码。这只是一种可能性,但还有很多其他原因导致Fortran代码对您的使用不是线程安全的。
如果这确实是问题,那么您可以选择一些选项:
最后一个选项是相当严重的黑客攻击,但它可能是最有效的短期解决方案。要安排您有单独的实例,您只需要复制并重命名DLL,以便每个线程加载具有不同名称的DLL。即使它们相同,这足以说服Windows加载DLL模块的单独实例,从而分离所有全局数据的实例。
最后一个想法:确保将Fortran链接到Fortran运行时的多线程版本。