Estoy tratando de hacer algo de multihilo con el Android Native Development Kit, así que necesito un mutex en el lado de C++.Android NDK Mutex
¿Cuál es la forma correcta de crear y utilizar un mutex con Android NDK?
Gracias
Estoy tratando de hacer algo de multihilo con el Android Native Development Kit, así que necesito un mutex en el lado de C++.Android NDK Mutex
¿Cuál es la forma correcta de crear y utilizar un mutex con Android NDK?
Gracias
El NDK parece tener soporte para pthread mutexes. No los he usado yo mismo.
Así es como vamos en Windows y Android (OS_LINUX definir es para Android):
class clMutex
{
public:
clMutex()
{
#ifdef OS_LINUX
pthread_mutex_init(&TheMutex, NULL);
#endif
#ifdef OS_WINDOWS
InitializeCriticalSection(&TheCS);
#endif
}
/// Enter the critical section -- other threads are locked out
void Lock() const
{
#ifdef OS_LINUX
pthread_mutex_lock(&TheMutex);
#endif
#ifdef OS_WINDOWS
if (!TryEnterCriticalSection(&TheCS)) EnterCriticalSection(&TheCS);
#endif
}
/// Leave the critical section
void Unlock() const
{
#ifdef OS_LINUX
pthread_mutex_unlock(&TheMutex);
#endif
#ifdef OS_WINDOWS
LeaveCriticalSection(&TheCS);
#endif
}
~clMutex()
{
#ifdef OS_WINDOWS
DeleteCriticalSection(&TheCS);
#endif
#ifdef OS_LINUX
pthread_mutex_destroy(&TheMutex);
#endif
}
#ifdef OS_LINUX
// POSIX threads
mutable pthread_mutex_t TheMutex;
#endif
#ifdef OS_WINDOWS
mutable CRITICAL_SECTION TheCS;
#endif
};
Como uno de los desarrolladores de Linderdaum Engine recomiendo echar un vistazo a Mutex.h en nuestro SDK.
#include <pthread.h>
class CThreadLock
{
public:
CThreadLock();
virtual ~CThreadLock();
void Lock();
void Unlock();
private:
pthread_mutex_t mutexlock;
};
CThreadLock::CThreadLock()
{
// init lock here
pthread_mutex_init(&mutexlock, 0);
}
CThreadLock::~CThreadLock()
{
// deinit lock here
pthread_mutex_destroy(&mutexlock);
}
void CThreadLock::Lock()
{
// lock
pthread_mutex_lock(&mutexlock);
}
void CThreadLock::Unlock()
{
// unlock
pthread_mutex_unlock(&mutexlock);
}
esta pregunta tiene un año ... y ya ha sido respondida. – bitwise
Gracias. Me encontré con un montón de mensajes que decían que esto aún no se había implementado, pero deben haber sido muy antiguos. Escribí un pequeño módulo para NDK usando pthread, y lo compilé, pero nunca intenté ejecutarlo. Pude hacer el enhebrado en el lado de Java. Gracias de todos modos, probablemente termine usando el módulo en algún momento. – bitwise
Comentario para la posteridad: Tengo una aplicación que está usando pthread's, así como pthread mutex, y está funcionando bien, por lo que parece que están implementados y funcionan. –