diff options
Diffstat (limited to 'source/modules/asura-utils/threading/mutex.h')
-rw-r--r-- | source/modules/asura-utils/threading/mutex.h | 143 |
1 files changed, 71 insertions, 72 deletions
diff --git a/source/modules/asura-utils/threading/mutex.h b/source/modules/asura-utils/threading/mutex.h index 9e9d2c2..623a3db 100644 --- a/source/modules/asura-utils/threading/mutex.h +++ b/source/modules/asura-utils/threading/mutex.h @@ -2,127 +2,126 @@ #define __ASURA_MUTEX_H__ #include <asura-utils/type.h> +#include <asura-utils/classes.h> #include "../utils_config.h" #if ASURA_THREAD_WIN32 - #include <windows.h> +#include <windows.h> #endif -namespace AsuraEngine -{ - namespace Threading - { +namespace_begin(AsuraEngine) +namespace_begin(Threading) #define ASURA_MUTEX_MAXWAIT (~(uint32)0) - class MutexImpl; +class MutexImpl; - class Mutex - { - public: +class Mutex +{ +public: - Mutex(); - ~Mutex(); + Mutex(); + ~Mutex(); - void Lock(); - void Unlock(); + void Lock(); + void Unlock(); - private: +private: - // ֹ - Mutex(const Mutex&); - Mutex& operator=(const Mutex&); + // ֹ + Mutex(const Mutex&); + Mutex& operator=(const Mutex&); - MutexImpl* m_Impl; + MutexImpl* m_Impl; - }; +}; - class _mutex_locker - { - public: - _mutex_locker(Mutex& mutex) - : m(mutex) - { - m.Lock(); - }; - ~_mutex_locker() - { - m.Unlock(); - } - operator bool() { return false; }; - private: - void* operator new(size_t); - Mutex& m; - }; +class _mutex_locker +{ +public: + _mutex_locker(Mutex& mutex) + : m(mutex) + { + m.Lock(); + }; + ~_mutex_locker() + { + m.Unlock(); + } + operator bool() { return false; }; +private: + void* operator new(size_t); + Mutex& m; +}; #define lock(m) \ - if(_mutex_locker _asura_mutex_locker = m){} else +if(_mutex_locker _asura_mutex_locker = m){} else - ASURA_ABSTRACT class MutexImpl - { - public: +ASURA_ABSTRACT class MutexImpl +{ +public: - MutexImpl() {}; - virtual ~MutexImpl() {}; + MutexImpl() {}; + virtual ~MutexImpl() {}; - virtual void Lock() = 0; - virtual void Unlock() = 0; + virtual void Lock() = 0; + virtual void Unlock() = 0; - }; +}; #if ASURA_MUTEX_WIN32_CRITICLE_SECTION - //https://blog.csdn.net/l799623787/article/details/18259949 - class MutexImplWin32_CS ASURA_FINAL : public MutexImpl - { - public: +//https://blog.csdn.net/l799623787/article/details/18259949 +class MutexImplWin32_CS ASURA_FINAL : public MutexImpl +{ +public: - MutexImplWin32_CS(); - ~MutexImplWin32_CS(); + MutexImplWin32_CS(); + ~MutexImplWin32_CS(); - void Lock() override; - void Unlock() override; + void Lock() override; + void Unlock() override; - private: +private: - //HANDLE m_Handle; - CRITICAL_SECTION m_Mutex; + //HANDLE m_Handle; + CRITICAL_SECTION m_Mutex; - }; +}; #endif // ASURA_MUTEX_WIN32_CRITICLE_SECTION #if ASURA_MUTEX_WIN32_KERNAL_MUTEX - class MutexImplWin32_KM ASURA_FINAL : public MutexImpl - { - public: +class MutexImplWin32_KM ASURA_FINAL : public MutexImpl +{ +public: - MutexImplWin32_KM(); - ~MutexImplWin32_KM(); + MutexImplWin32_KM(); + ~MutexImplWin32_KM(); - void Lock() override; - void Unlock() override; + void Lock() override; + void Unlock() override; - private: +private: - HANDLE m_Handle; + HANDLE m_Handle; - }; +}; #endif // ASURA_MUTEX_WIN32_KERNAL_MUTEX #if ASURA_THREAD_STD - class MutexImplSTD ASURA_FINAL : public MutexImpl - { - }; +class MutexImplSTD ASURA_FINAL : public MutexImpl +{ +}; #endif // ASURA_THREAD_STD - } -} +namespace_end +namespace_end namespace AEThreading = AsuraEngine::Threading; |