Eua*_*uan 5 .net multithreading loadlibrary
我的.Net程序使用fortran Dll来执行数学函数(Arpack,解决本征模式).我相信fortran包含静态变量,通常不是线程安全的.此外,它非常复杂,可能需要花费大量精力才能使其保持线程安全.Dll不是很大(700K)所以我只想加载它多次(比如4或8)以允许线程同时工作.任何人都知道我该怎么做?我听说LoadLibrary在多次调用时总会返回相同的句柄.因此,我认为唯一的解决方案是在磁盘上安装我的Dll的多个副本(Arpack1.dll,Arpack2.dll等)并根据需要加载它们.太可怕了.
有任何想法吗?
尤安
您发现的解决方法实际上是一个相当不错的解决方法。带有 LOAD_LIBRARY_AS_IMAGE_RESOURCE 选项的 LoadLibraryEx() 可能会起作用的可能性很小。该选项允许您多次加载它。但我严重怀疑这一点,DLL 几乎肯定依赖于通过 DllMain 初始化其运行时支持代码。
我没有听到你提到的一件事是必须使用 GetProcAddress() 的痛苦。确保你这样做,否则当你开始线程时你仍然会破坏全局变量。每个线程必须使用自己的地址。