NDK是否为消息队列提供支持?

问题描述 投票:2回答:1

我正在尝试使用android ndk构建一个共享库。运行ndk build时出现此错误

fatal error: 'mqueue.h' file not found

根据我对谷歌搜索的理解,问题是Android确实提供了对某些POSIX或System V功能(如消息队列)的支持。

所以我想知道这是否正确?如果是的话,我的选择是什么 - 我可以对我的应用程序进行哪些更改以模仿消息队列?

(我在Ubuntu 14.04 PC上使用android-ndk-r16b)

android-ndk ipc message-queue
1个回答
2
投票

是的,Android上不支持POSIX消息队列,以及其他一些SysV IPC机制。简而言之,这是因为可能导致无法恢复的资源泄漏。这不仅适用于“忘记”释放所获得的IPC资源而且适用于每个资源的错误应用程序。原因是Android集中使用kill(app_pid, SIGKILL)从后台进程回收系统资源,刚刚由用户启动。结果应用程序死亡,没有机会执行拆卸。内核无法释放IPC资源,因为它们可能以不可预测的方式被其他进程共享(与文件描述符和虚拟内存不同)。请记住,Android主要在资源受限的硬件上运行,因此某些此类资源重新排列是不可避免的。更多背景是here。旧NDK包中包含此文档,但在某些时候它已被删除。

IPC在Android上的替代方式通常包括基于Binder的解决方案。在本机代码中,您可以使用ashmem为共享内存段提供接口。最新的平台版本向它公开了公共API,请参阅<android/sharedmem.h>。但是对于较旧平台的事件,您可以通过与ashmem驱动程序的直接交互来实现类似的功能,请参阅libcutils来源。

最后,您仍然可以使用管道,UNIX域套接字和可能命名的管道(当然,如果底层文件系统支持这样的inode)。

© www.soinside.com 2019 - 2024. All rights reserved.