diff options
Diffstat (limited to 'Runtime/Threads/Posix/PlatformMutex.cpp')
-rw-r--r-- | Runtime/Threads/Posix/PlatformMutex.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Runtime/Threads/Posix/PlatformMutex.cpp b/Runtime/Threads/Posix/PlatformMutex.cpp new file mode 100644 index 0000000..b48e138 --- /dev/null +++ b/Runtime/Threads/Posix/PlatformMutex.cpp @@ -0,0 +1,51 @@ +#include "UnityPrefix.h" + +#if SUPPORT_THREADS + +#ifndef MUTEX_API_PTHREAD +#define MUTEX_API_PTHREAD (UNITY_OSX || UNITY_IPHONE || UNITY_ANDROID || UNITY_PEPPER || UNITY_LINUX || UNITY_BB10 || UNITY_TIZEN) +#endif + +#endif // SUPPORT_THREADS + +#if MUTEX_API_PTHREAD +// ------------------------------------------------------------------------------------------------- +// pthreads + +#include "PlatformMutex.h" + +#if defined(__native_client__) +#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP +#endif + +PlatformMutex::PlatformMutex ( ) +{ + pthread_mutexattr_t attr; + + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE ); + pthread_mutex_init(&mutex, &attr); + pthread_mutexattr_destroy(&attr); +} + +PlatformMutex::~PlatformMutex () +{ + pthread_mutex_destroy(&mutex); +} + +void PlatformMutex::Lock() +{ + pthread_mutex_lock(&mutex); +} + +void PlatformMutex::Unlock() +{ + pthread_mutex_unlock(&mutex); +} + +bool PlatformMutex::TryLock() +{ + return pthread_mutex_trylock(&mutex) == 0; +} + +#endif // MUTEX_API_PTHREAD |