2015-03-13 5 views
1

Est-ce que Android prend en charge les mutex partagés par processus et les variables de condition? J'ai entendu dire que l'implémentation de bionic ne les supporte pas parce qu'Android a d'autres moyens d'IPC, mais ne trouve pas d'informations qui le confirmeraient ou le nieraient.Mutex partagés par processus et variables conditionnelles sous Android

Les sources sont un peu déroutantes. Dans le pthread_mutex.cpp de bionique juste avant pthread_mutexattr_setpshared il y a un commentaire:

/* process-shared mutexes are not supported at the moment */ 

Mais à l'intérieur de la fonction, il est aussi écrit:

  /* our current implementation of pthread actually supports shared 
     * mutexes but won't cleanup if a process dies with the mutex held. 
     * Nevertheless, it's better than nothing. Shared mutexes are used 
     * by surfaceflinger and audioflinger. 
     */ 

Ainsi Quelqu'un at-il utilisé mutex de processus partagés (et cond vars) dans les applications android natives (en les partageant avec ashmem_create_region, par exemple)?

Répondre

0

J'ai réussi à le faire fonctionner sur Android 5.0, donc ils sont pris en charge. L'un des processus crée la mémoire partagée et partage le descripteur de fichier avec l'autre, à la fois mmap et ça marche.

1

1, Android prend en charge le mutex partagé. 2, Android ne supporte pas le mutex robuste (futex robuste) qui peut "nettoyer si un processus meurt avec le mutex tenu". Par conséquent, seul le processus système peut l'utiliser (il ne plante jamais ou ne tue pas, en cas de panne, le système redémarre).