【问题标题】:Android native library shared memoryAndroid原生库共享内存
【发布时间】:2014-06-29 10:59:17
【问题描述】:

我正在编写本机共享库,它需要 Android 支持,并且我需要在使用该库的所有进程之间共享一些数据(UID 和一些附加字段)。在 Linux 中,对此的好机会是 POSIX 共享内存。但 Android NDK 不支持 POSIX 共享内存。有 ashmem,但是为了从其他进程访问共享内存区域,我需要使用 binder IPC 来传输打开的文件描述符。但这不是
合理的,因为当其他进程想要访问共享数据时,可能会终止创建区域的进程。

有什么办法可以解决我的 Android 共享内存问题?

【问题讨论】:

  • ashmem 有引用计数器,因此其他进程仍然可以使用该区域,即使创建它的进程已被清除

标签: android c++ android-ndk shared-libraries shared-memory


【解决方案1】:

首先,你不需要 Binder,你可以使用 sendmsg() 和 recvmsg() 通过 Unix 本地套接字传递文件描述符。例如,参见 [1] 中的 SendFd() 和 ReceiveFd() 函数

第二个 ashmem 区域是引用计数的,只要在一个 ashmem 区域上打开一个文件描述符,它就不会消失,即使创建的进程被杀死。

希望这会有所帮助。

[1]https://android.googlesource.com/platform/ndk/+/master/sources/android/crazy_linker/tests/test_util.h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 2018-02-15
    • 2010-11-13
    • 2016-09-14
    相关资源
    最近更新 更多