summaryrefslogtreecommitdiff
path: root/source/libs/asura-lib-utils/threading/mutex.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-28 08:56:15 +0800
committerchai <chaifix@163.com>2019-03-28 08:56:15 +0800
commit3bced067a4144381e59ce4bd0eb749eeff5ad1f4 (patch)
tree0352c8ae263dae904967f9e21326ce2a4ca9ada8 /source/libs/asura-lib-utils/threading/mutex.cpp
parentf6bcacef6e10200b1c0dc34c4aa34313cbfc0392 (diff)
*misc
Diffstat (limited to 'source/libs/asura-lib-utils/threading/mutex.cpp')
-rw-r--r--source/libs/asura-lib-utils/threading/mutex.cpp55
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
}
}