用于进程同步的Android机制

时间:2016-12-16 15:41:39

标签: java android android-ndk synchronization semaphore

为了在android中的两个进程之间交换信息,我正在使用共享内存。但是为了避免并行写入/读取的情况,我需要在这两个过程之间进行某种同步(经典的生产者 - 消费者问题)。

标准方法是使用信号量。但是Android中似乎不支持它们(请参阅https://android.googlesource.com/platform/external/pthreads/+/master/sem_open.c上的实现)。

经过一些研究后我发现,对于流程同步,可以使用文件锁的方法(https://developer.android.com/reference/java/nio/channels/FileLock.html)。这对我来说是一个完美的解决方案,但是我们的应用程序不应该声明WRITE_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE,因此我们无法锁定"真正的"文件。我通过使用其文件描述符尝试了锁定共享内存对象本身的方法。不幸的是,这不起作用。似乎对于FileLock来说,"真实"文件对象是必需的。

我已经做了很多搜索,根据我的发现,大多数经典的ipc同步机制都不受支持,而在Android世界中,Binder的使用是首选的IPC机制。

我的问题是,如何使用绑定器(或任何其他替代方案)实现类似信号量的机制。当然我们可以用

创建AIDL
  • isLocked
  • 发布

一组方法。但这意味着需要"繁忙的等待" 方法(在每次写入/读取操作之前),我们要避免这种方法。

我们可以使用任何同步机制/模式(Java或NDK)吗?

0 个答案:

没有答案