java - int[] 在 Java 和 C++ 之间共享?

标签 java android c++ multithreading java-native-interface

我有一个 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/

相关文章:

java - 如何让Java服务器发送ison响应

Android 手机和平板电脑用户界面

C++ 速度和逻辑流程

android - 闪屏中的闪屏出现在哪里?

c++ - 我可以将编译时字符串比较与 MPL 模板混合使用吗?

c++ - 如何为 std::vector<std::vector<bool>> 编写哈希函数

java - @XmlElement - 从未使用 @xml-annotation 映射的对象获取字符串值

java - JSP 或 Servlet PrintWriter

java - 使用 GSON 序列化嵌入式对(键/值)而不是对象

android - Kotlin Android 搜索菜单项在 Activity 开始时聚焦