【发布时间】:2015-05-31 00:04:43
【问题描述】:
虽然我的 C++ 程序显然不是线程安全的,但我需要从 Java 的多个线程中并行调用它。由于性能问题,我无法重写 C++ 代码,需要执行通过并行编译 C++ 程序创建的 DLL。
如何从 Java 的多线程调用非线程安全的 C++ 函数?
我尝试使用 JNA 并在每次线程调用 DLL 函数时调用 Native#loadLibrary。但是,它并没有解决问题并出现分段错误。
public static class MyRunnable implements Runnable{
...
public void run(){
MyCLibrary INSTANCE = (MyCLibrary)Native.loadLibrary(MyCLibrary.JNA_LIBRARY_NAME, MyCLibrary.class);
INSTANCE.cfunc()
}
...
}
我认为 DLL 的新内存空间是通过调用 Native#loadLibrary 分配的,应该避免重入问题。但是,我的想法可能有问题。
我搜索了从 Java 为 DLL 创建多个内存空间的正确方法,但找不到。
【问题讨论】:
标签: java c++ multithreading dll