Android JNI&;多线程

Android JNI&;多线程,android,java-native-interface,Android,Java Native Interface,我有一个使用共享c库的多线程JAVA应用程序。如果我从不同的线程访问这个库,会发生什么 谢谢, Nahum这完全取决于C库。如果函数不存储任何状态(例如,只计算某些结果,只在堆栈上使用局部变量),则可以从多个线程中安全地使用它。否则,您必须注意为每个线程单独存储状态列表,例如,通过使用malloc并返回进一步调用的句柄,以便后续调用将重用malloced内存块中的状态 如果我不知道代码的内部结构,我更喜欢构建一个小型C应用程序并使用Runtime.exec调用它,但这只有在C函数做了足够的工作来

我有一个使用共享c库的多线程JAVA应用程序。如果我从不同的线程访问这个库,会发生什么

谢谢,
Nahum

这完全取决于C库。如果函数不存储任何状态(例如,只计算某些结果,只在堆栈上使用局部变量),则可以从多个线程中安全地使用它。否则,您必须注意为每个线程单独存储状态列表,例如,通过使用malloc并返回进一步调用的句柄,以便后续调用将重用malloced内存块中的状态


如果我不知道代码的内部结构,我更喜欢构建一个小型C应用程序并使用Runtime.exec调用它,但这只有在C函数做了足够的工作来证明exec开销的合理性时才有用。

这完全取决于C库。如果函数不存储任何状态(例如,只计算某些结果,只在堆栈上使用局部变量),则可以从多个线程中安全地使用它。否则,您必须注意为每个线程单独存储状态列表,例如,通过使用malloc并返回进一步调用的句柄,以便后续调用将重用malloced内存块中的状态

如果我不知道代码的内部结构,我更喜欢构建一个小型C应用程序并使用Runtime.exec调用它,但这只有在C函数做了足够的工作来证明exec开销的合理性时才有用