diff options
author | 2017-02-05 13:56:35 +0100 | |
---|---|---|
committer | 2017-02-05 13:56:35 +0100 | |
commit | 1607745432f50099711d7aee355111111e66ff51 (patch) | |
tree | c4eaec8008f6e0283ca652cdffb55a34eca9b9bb /3rdparty/bx/src/mutex.cpp | |
parent | 193e8c8a89a4be5c63909cdbbcca4d9d6f8fee02 (diff) |
Update BGFX and BX (nw)
Diffstat (limited to '3rdparty/bx/src/mutex.cpp')
-rw-r--r-- | 3rdparty/bx/src/mutex.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/3rdparty/bx/src/mutex.cpp b/3rdparty/bx/src/mutex.cpp new file mode 100644 index 00000000000..00e517684e2 --- /dev/null +++ b/3rdparty/bx/src/mutex.cpp @@ -0,0 +1,92 @@ +/* + * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bx#license-bsd-2-clause + */ + +#include <bx/mutex.h> + +#if BX_CONFIG_SUPPORTS_THREADING + +#if 0 \ + || BX_PLATFORM_ANDROID \ + || BX_PLATFORM_LINUX \ + || BX_PLATFORM_NACL \ + || BX_PLATFORM_IOS \ + || BX_PLATFORM_OSX +# include <pthread.h> +#elif 0 \ + || BX_PLATFORM_WINDOWS \ + || BX_PLATFORM_WINRT \ + || BX_PLATFORM_XBOX360 +# include <errno.h> +#endif // BX_PLATFORM_ + +namespace bx +{ +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT + typedef CRITICAL_SECTION pthread_mutex_t; + typedef unsigned pthread_mutexattr_t; + + inline int pthread_mutex_lock(pthread_mutex_t* _mutex) + { + EnterCriticalSection(_mutex); + return 0; + } + + inline int pthread_mutex_unlock(pthread_mutex_t* _mutex) + { + LeaveCriticalSection(_mutex); + return 0; + } + + inline int pthread_mutex_trylock(pthread_mutex_t* _mutex) + { + return TryEnterCriticalSection(_mutex) ? 0 : EBUSY; + } + + inline int pthread_mutex_init(pthread_mutex_t* _mutex, pthread_mutexattr_t* /*_attr*/) + { +#if BX_PLATFORM_WINRT + InitializeCriticalSectionEx(_mutex, 4000, 0); // docs recommend 4000 spincount as sane default +#else + InitializeCriticalSection(_mutex); +#endif + return 0; + } + + inline int pthread_mutex_destroy(pthread_mutex_t* _mutex) + { + DeleteCriticalSection(_mutex); + return 0; + } +#endif // BX_PLATFORM_ + + Mutex::Mutex() + { + pthread_mutexattr_t attr; +#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT +#else + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); +#endif // BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT + pthread_mutex_init(&m_handle, &attr); + } + + Mutex::~Mutex() + { + pthread_mutex_destroy(&m_handle); + } + + void Mutex::lock() + { + pthread_mutex_lock(&m_handle); + } + + void Mutex::unlock() + { + pthread_mutex_unlock(&m_handle); + } + +} // namespace bx + +#endif // BX_MUTEX_H_HEADER_GUARD |