summaryrefslogtreecommitdiff
path: root/source/libs/asura-lib-utils/threading/mutex.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-27 22:18:14 +0800
committerchai <chaifix@163.com>2019-03-27 22:18:14 +0800
commit69f7d1bd745ed5680b9bc4e3cfdd882ff2a5ad26 (patch)
tree729e563da8fea6cf8c5455f3afdb3c6ce0aecde4 /source/libs/asura-lib-utils/threading/mutex.h
parent66c5fdc564dd892ed265132d6c1378dbe3cebcee (diff)
+threading
Diffstat (limited to 'source/libs/asura-lib-utils/threading/mutex.h')
-rw-r--r--source/libs/asura-lib-utils/threading/mutex.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/source/libs/asura-lib-utils/threading/mutex.h b/source/libs/asura-lib-utils/threading/mutex.h
index 893c6e5..5ed45ae 100644
--- a/source/libs/asura-lib-utils/threading/mutex.h
+++ b/source/libs/asura-lib-utils/threading/mutex.h
@@ -1,21 +1,105 @@
#ifndef __ASURA_MUTEX_H__
#define __ASURA_MUTEX_H__
+#include <asura-lib-utils/type.h>
+
+#include "../utils_config.h"
+
+#if ASURA_THREAD_WIN32
+ #include <windows.h>
+#endif
+
namespace AsuraEngine
{
namespace Threading
{
+ class MutexImpl;
+
class Mutex
{
public:
+ Mutex();
+ ~Mutex();
+
void Lock();
void Unlock();
+ private:
+
+ MutexImpl* mImpl;
+
+ };
+
+ class Lock
+ {
+ public:
+ Lock(Mutex& mutex)
+ : m(mutex)
+ {
+ m.Lock();
+ };
+ ~Lock()
+ {
+ m.Unlock();
+ }
+ private:
+ void* operator new(size_t);
+ Mutex& m;
+ };
+
+#define lock(mutex) Lock _asura_scoped_lock_0x0_(mutex)
+#define lock2(mutex) Lock _asura_scoped_lock_0x1_(mutex)
+#define lock3(mutex) Lock _asura_scoped_lock_0x2_(mutex)
+#define lock4(mutex) Lock _asura_scoped_lock_0x3_(mutex)
+#define lock5(mutex) Lock _asura_scoped_lock_0x4_(mutex)
+
+ ASURA_ABSTRACT class MutexImpl
+ {
+ public:
+
+ MutexImpl() {};
+ virtual ~MutexImpl() {};
+
+ virtual void Lock() = 0;
+ virtual void Unlock() = 0;
+
+ };
+
+#if ASURA_THREAD_WIN32
+
+ //https://blog.csdn.net/l799623787/article/details/18259949
+ class MutexImplWin32 ASURA_FINAL : public MutexImpl
+ {
+ public:
+
+ MutexImplWin32();
+ ~MutexImplWin32();
+
+ void Lock() override;
+ void Unlock() override;
+
+ private:
+
+ //HANDLE mHandle;
+ CRITICAL_SECTION mMutex;
+
};
+#endif // ASURA_THREAD_WIN32
+
+#if ASURA_THREAD_STD
+
+ class MutexImplSTD ASURA_FINAL : public MutexImpl
+ {
+ };
+
+#endif // ASURA_THREAD_STD
+
}
}
+namespace AEThreading = AsuraEngine::Threading;
+
#endif \ No newline at end of file