从Java';调用非线程安全DLL函数;s多线程并行 虽然我的C++程序显然不是线程安全的,但是我需要从java的多个线程中并行调用它。我不能重写C++代码,需要执行编译C++程序的DLL,因为性能问题,在< >中并行。 P>启动多个子进程到(每个)运行调用函数的C++应用程序。通过进程管道或使用网络消息、RPC等传递参数和结果。(问题是java应用程序C++应用程序信息传递可能是性能瓶颈。)< /P> < P>重写C++代码,使其线程安全。
我尝试的是使用JNA并在每次线程调用DLL函数时调用从Java';调用非线程安全DLL函数;s多线程并行 虽然我的C++程序显然不是线程安全的,但是我需要从java的多个线程中并行调用它。我不能重写C++代码,需要执行编译C++程序的DLL,因为性能问题,在< >中并行。 P>启动多个子进程到(每个)运行调用函数的C++应用程序。通过进程管道或使用网络消息、RPC等传递参数和结果。(问题是java应用程序C++应用程序信息传递可能是性能瓶颈。)< /P> < P>重写C++代码,使其线程安全。,java,c++,multithreading,dll,Java,C++,Multithreading,Dll,我尝试的是使用JNA并在每次线程调用DLL函数时调用Native#loadLibrary。但是,它并没有解决这个问题,并且出现了分割错误 public static class MyRunnable implements Runnable{ ... public void run(){ MyCLibrary INSTANCE = (MyCLibrary)Native.loadLibrary(MyCLibrary.JNA_LIBRARY_NAME, MyCLibrary.class
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++的多线程?
你不能。你不能做它<强>因为 C++函数不是thyth-Sea1../p>
我搜索了从Java为DLL创建多个内存空间的正确方法,但找不到它
没有办法做到这一点。(阿法克)
你的选择是:
将C++函数调用到单个java线程中…或者一次一根线。(不可接受,在后一种情况下,可能不安全。)
1-这可能夸大了情况。这可能取决于C++函数为什么不是线程安全的。但如果问题是。。。正如我所怀疑的。。。如果函数使用静态变量来保持状态,则情况与我的状态相同。很高兴得到替代方案。谢谢。