我有一个 Android 应用程序,它有两个线程,它们共享 Application 对象中的一个 int[]。一个线程从激光雷达收集/处理数据并将其存储在 int[] 中,而另一个线程读取 int[] 并更新绘制的图像。 int[]中的每个位置代表一个特定的角度,每个int的内容代表该角度的距离测量值。
收集/处理线程需要用 C++ 重新编写,以利用现有代码并提高速度。我打算使用 JNI。
可以使用什么机制在 native 线程和 Java 线程之间共享 int[]?它不是流、缓冲区或生产者/消费者模型。
最佳答案
你可以使用 sqlite3。它是 Android 原生的,library reference非常可读。 sqlite.org 提供了一个很好的interface specification for C++
警告:sqlite 不提供任何类型的行/列锁定,因此您可能想看看制作一个 Singleton 类作为与 sqlite3 数据库接口(interface)的包装器,它可以处理行/列锁定以避免竞争条件。
共享工作队列(带有适当的语言包装器)也可以代替创建整个单例类(我想无论如何都是单例)但你的电话。
另一种方法是在您的应用中实现 Firebase。是的,我知道它是基于云的,但它也维护一个本地实例。它还乐观地处理行/列锁定;这意味着最后更新的是剩下的。
关于java - int[] 在 Java 和 C++ 之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795935/