从Java';调用非线程安全DLL函数;s多线程并行 虽然我的C++程序显然不是线程安全的,但是我需要从java的多个线程中并行调用它。我不能重写C++代码,需要执行编译C++程序的DLL,因为性能问题,在< >中并行。 P>启动多个子进程到(每个)运行调用函数的C++应用程序。通过进程管道或使用网络消息、RPC等传递参数和结果。(问题是java应用程序C++应用程序信息传递可能是性能瓶颈。)< /P> < P>重写C++代码,使其线程安全。

从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

我尝试的是使用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++的多线程? 你不能。你不能做它<强>因为 C++函数不是thyth-Sea1../p> 我搜索了从Java为DLL创建多个内存空间的正确方法,但找不到它

没有办法做到这一点。(阿法克)

你的选择是:

    将C++函数调用到单个java线程中…或者一次一根线。(不可接受,在后一种情况下,可能不安全。)

    > P>启动多个子进程到(每个)运行调用函数的C++应用程序。通过进程管道或使用网络消息、RPC等传递参数和结果。(问题是java应用程序C++应用程序信息传递可能是性能瓶颈。)< /P> < P>重写C++代码,使其线程安全。

最后一种方法将为您提供最佳性能



1-这可能夸大了情况。这可能取决于C++函数为什么不是线程安全的。但如果问题是。。。正如我所怀疑的。。。如果函数使用静态变量来保持状态,则情况与我的状态相同。

很高兴得到替代方案。谢谢。