【发布时间】:2014-03-20 13:14:21
【问题描述】:
我想并行化对不可重入的本机库 (DLL) 的调用。两个线程应该并行调用本机函数。我想使用 JNA 来访问 DLL。锁不是解决方案,因为这不是并行性。
到目前为止我的想法:
线程池,每个线程持有一个代理实例,指向使用 Native.loadLibrary() 加载的 DLL(它可能仅在 DLL 可以在一个 JVM 中多次加载且不共享任何状态时才有效)
线程池中的线程将每个代理实例保存到其自己的具有不同名称的物理 DLL 中。每个都加载了 Native.loadLibrary()。 (可能只有在同一个库接口可以加载多个DLL的情况下才有效)
我是否需要在不同的 JVM 中加载 DLL 以实现并行性。
有谁知道这些想法之一是否可行/或为什么它行不通。其他建议? 谢谢,马丁
【问题讨论】:
-
您需要尽可能多的 DLL 副本以实现并行性,每个副本都以唯一的名称加载。这假设库本身在这种用法下不会窒息。