【问题标题】:C++ Shared-memory necessary for queue of std::strings to pass through JNI?c++ - std::strings 队列通过 JNI 所需的 C++ 共享内存?
【发布时间】:2011-05-18 23:07:18
【问题描述】:

我试图了解从 c++ 守护程序获取字符串的机制是什么,我已经编写了 Java 以供 UI 使用。我将张贴我所设想的图片,然后继续提问:

我在这里设想了两个问题:

1) 信号量需要对库可用。在 Windows 中,这可以通过命名信号量和访问它的句柄来完成。在 Linux 中,有人建议我在共享内存中使用信号量,并通过共享内存的密钥让进程知道它。这对我来说是模糊的,但这个概念是否适用于同步 Java 和守护进程?

2) 为了使上图中的??? 链接正常工作,我是否必须将队列放在共享内存中?队列可以而且应该驻留在 .so 中吗?

所以这些是我的担忧。我很乐意并欢迎任何和所有帮助、挑战和理智的请求,并将尽我所能提供所有额外的必要信息。提前致谢。

【问题讨论】:

  • 使用套接字(也许是 UNIX 域)来完成这项任务可能要容易得多,而不必考虑 JNI。
  • 或管道,如果您更喜欢它们。
  • 我在一个嵌入式环境中,有一个控制卡管理多个 telnet 接口到扩展卡。添加了 Java 层,作为将数据从基于浏览器的 UI 获取到用 C++ 编写的底层硬件控制软件的一种手段。它可能并不优雅,但我是在设计后进入这个项目的。是否可行,即使可能很困难?

标签: c++ linux java-native-interface semaphore shared-memory


【解决方案1】:

您在单独的进程中运行这两个应用程序,在 vanilla Linux 中,这意味着您无法直接通过内存在这些进程之间进行通信。 Java VM 是一个进程,而 C++ 守护进程是一个进程。它位于单独的内存位置,由内存管理器 (MMU) 加扰。所以没有办法获得内存访问。

如果您愿意,请在 Google 上使用“内部流程通信”。我更喜欢使用 socketpair 进行双向父子通信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2014-10-05
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多