diff options
author | chai <chaifix@163.com> | 2019-03-28 08:56:15 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-03-28 08:56:15 +0800 |
commit | 3bced067a4144381e59ce4bd0eb749eeff5ad1f4 (patch) | |
tree | 0352c8ae263dae904967f9e21326ce2a4ca9ada8 /source/libs/asura-lib-utils/threading/mutex.cpp | |
parent | f6bcacef6e10200b1c0dc34c4aa34313cbfc0392 (diff) |
*misc
Diffstat (limited to 'source/libs/asura-lib-utils/threading/mutex.cpp')
-rw-r--r-- | source/libs/asura-lib-utils/threading/mutex.cpp | 55 |
1 files changed, 40 insertions, 15 deletions
diff --git a/source/libs/asura-lib-utils/threading/mutex.cpp b/source/libs/asura-lib-utils/threading/mutex.cpp index e0b6e1e..663ac28 100644 --- a/source/libs/asura-lib-utils/threading/mutex.cpp +++ b/source/libs/asura-lib-utils/threading/mutex.cpp @@ -23,8 +23,11 @@ namespace AsuraEngine Mutex::Mutex() : mImpl(nullptr) { -#if ASURA_THREAD_WIN32 - try_create_mutex(MutexImplWin32); +#if ASURA_MUTEX_WIN32_CRITICLE_SECTION + try_create_mutex(MutexImplWin32_CS); +#endif +#if ASURA_MUTEX_WIN32_KERNAL_MUTEX + try_create_mutex(MutexImplWin32_KM); #endif ASSERT(mImpl); } @@ -48,34 +51,56 @@ namespace AsuraEngine mImpl->Unlock(); } -#if ASURA_THREAD_WIN32 - MutexImplWin32::MutexImplWin32() +#if ASURA_MUTEX_WIN32_CRITICLE_SECTION + + MutexImplWin32_CS::MutexImplWin32_CS() { - //mHandle = ::CreateMutex(NULL, FALSE, NULL); - //if (!mHandle) - // throw Exception("Cant use win32 mutex."); ::InitializeCriticalSection(&mMutex); } - MutexImplWin32::~MutexImplWin32() + MutexImplWin32_CS::~MutexImplWin32_CS() { - //::CloseHandle(mHandle); - //mHandle = NULL; ::DeleteCriticalSection(&mMutex); } - void MutexImplWin32::Lock() + void MutexImplWin32_CS::Lock() { - //::WaitForSingleObject(mHandle, INFINITE); ::EnterCriticalSection(&mMutex); } - void MutexImplWin32::Unlock() + void MutexImplWin32_CS::Unlock() { - //::ReleaseMutex(mHandle); ::LeaveCriticalSection(&mMutex); } -#endif // ASURA_THREAD_WIN32 + +#endif // ASURA_MUTEX_WIN32_CRITICLE_SECTION + +#if ASURA_MUTEX_WIN32_KERNAL_MUTEX + + MutexImplWin32_KM::MutexImplWin32_KM() + { + mHandle = ::CreateMutex(NULL, FALSE, NULL); + if (!mHandle) + throw Exception("Cant use win32 mutex."); + } + + MutexImplWin32_KM::~MutexImplWin32_KM() + { + ::CloseHandle(mHandle); + mHandle = NULL; + } + + void MutexImplWin32_KM::Lock() + { + ::WaitForSingleObject(mHandle, INFINITE); + } + + void MutexImplWin32_KM::Unlock() + { + ::ReleaseMutex(mHandle); + } + +#endif // ASURA_MUTEX_WIN32_KERNAL_MUTEX } } |