gpt4 book ai didi

multithreading - 使用 fortran dll 的线程安全 C# 服务

转载 作者:行者123 更新时间:2023-12-03 13:21:54 26 4
gpt4 key购买 nike

我有一个 c# windows 服务,它启动几个线程,然后每个线程从使用 intel fortran 9 编译的静态 dll 库中执行相同的 fortran 函数。

发生这种情况时,第一个函数会继续正常运行,而另一个会触发 c# 异常。

有没有编译器选项可以解决这个问题?我用谷歌搜索了很多,只找到递归并保存。我明天必须在办公室对它们进行测试,但我并不乐观。

PS:fortran 代码有模块

谢谢!

最佳答案

您的问题很可能是 Fortran 代码。 Fortran 代码使用共享全局状态变量并不少见,尤其是对于旧代码。这只是一种可能性,但还有很多其他原因导致 Fortran 代码对于您的使用而言可能不是线程安全的。

如果这确实是问题,那么您有几个选项可能会有所帮助:

  • 使用互斥锁/锁序列化对 Fortran 代码的调用。
  • 重构 Fortran 代码以删除全局共享状态,例如将其移动到堆栈上。
  • 安排每个线程使用单独的 DLL 实例。

  • 最后一个选项是相当严重的黑客攻击,但它可能是最有效的短期解决方案。要安排您拥有单独的实例,您只需复制并重命名 DLL,以便每个线程加载具有不同名称的 DLL。即使它们是相同的,这也足以说服 Windows 加载 DLL 模块的单独实例,从而单独加载所有全局数据的实例。

    最后一个想法:确保将 Fortran 链接到 Fortran 运行时的多线程版本。

    关于multithreading - 使用 fortran dll 的线程安全 C# 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6439606/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com