{
Impl() { InitializeCriticalSection(&cs); refcount = 1; }
~Impl() { DeleteCriticalSection(&cs); }
-
+
void lock() { EnterCriticalSection(&cs); }
bool trylock() { return TryEnterCriticalSection(&cs) != 0; }
void unlock() { LeaveCriticalSection(&cs); }
-
+
CRITICAL_SECTION cs;
int refcount;
};
{
Impl() { sl = OS_SPINLOCK_INIT; refcount = 1; }
~Impl() {}
-
+
void lock() { OSSpinLockLock(&sl); }
bool trylock() { return OSSpinLockTry(&sl); }
void unlock() { OSSpinLockUnlock(&sl); }
-
+
OSSpinLock sl;
int refcount;
};
-#elif defined __linux__
+#elif defined __linux__ && !defined ANDROID
struct Mutex::Impl
{
Impl() { pthread_spin_init(&sl, 0); refcount = 1; }
~Impl() { pthread_spin_destroy(&sl); }
-
+
void lock() { pthread_spin_lock(&sl); }
bool trylock() { return pthread_spin_trylock(&sl) == 0; }
void unlock() { pthread_spin_unlock(&sl); }
-
+
pthread_spinlock_t sl;
int refcount;
};
{
Impl() { pthread_mutex_init(&sl, 0); refcount = 1; }
~Impl() { pthread_mutex_destroy(&sl); }
-
+
void lock() { pthread_mutex_lock(&sl); }
bool trylock() { return pthread_mutex_trylock(&sl) == 0; }
void unlock() { pthread_mutex_unlock(&sl); }
-
+
pthread_mutex_t sl;
int refcount;
};
{
impl = new Mutex::Impl;
}
-
+
Mutex::~Mutex()
{
if( CV_XADD(&impl->refcount, -1) == 1 )
delete impl;
impl = 0;
}
-
+
Mutex::Mutex(const Mutex& m)
{
impl = m.impl;
impl = m.impl;
return *this;
}
-
+
void Mutex::lock() { impl->lock(); }
void Mutex::unlock() { impl->unlock(); }
-bool Mutex::trylock() { return impl->trylock(); }
+bool Mutex::trylock() { return impl->trylock(); }
}