我有一个使用共享 C 库的多线程 JAVA 应用程序。如果我从不同的线程访问这个库,它会发生什么?
谢谢, 那鸿书
最佳答案
这完全取决于 C 库。如果该函数不存储任何状态(例如,只计算一些结果并且只使用堆栈上的局部变量),那么从多个线程使用它是安全的。否则,您必须注意为每个线程单独存储状态,例如通过使用 malloc 并返回句柄以供进一步调用,以便后续调用将重用 malloced 内存块中的状态。
如果我不了解代码的内部结构,我更喜欢构建一个小型 C 应用程序并使用 Runtime.exec 调用它,但这只有在 C 函数完成足够的工作以证明 exec 开销合理时才有用。
关于android - JNI 和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5898034/