我的.Net程序使用fortran Dll来执行数学函数(Arpack,求解本征模式).我相信fortran包含静态变量,通常不是线程安全的.此外,它非常复杂,可能需要花费大量精力才能使其保持线程安全. Dll不是很大(700K)所以我只想加载它多次(比如4或8)以允许线程同时工作.任何人都知道我怎么能这样做?我听说LoadLibrary在多次调用时总会返回相同的句柄.因此,我认为唯一的解决方案是在磁盘上安装我的Dll的多个副本(Arpack1.dll,Arpack2.dll等)并根据需要加载它们.太可怕了.
有任何想法吗?
尤安
你找到的解决方法实际上是相当不错的.使用LOAD_LIBRARY_AS_IMAGE_RESOURCE选项的LoadLibraryEx()可能会有小的可能性.该选项允许您多次加载它.我严重怀疑它,DLL几乎肯定依赖于通过DllMain初始化其运行时支持代码.
我没有听到你提到的一件事是必须使用GetProcAddress()的痛苦.确保你这样做,或者当你开始线程时你仍然会踩踏全局变量.每个线程必须使用自己的地址.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。