diff options
| -rw-r--r-- | zencore/include/zencore/thread.h | 8 | ||||
| -rw-r--r-- | zencore/thread.cpp | 21 |
2 files changed, 28 insertions, 1 deletions
diff --git a/zencore/include/zencore/thread.h b/zencore/include/zencore/thread.h index 30d0c0897..b18da6031 100644 --- a/zencore/include/zencore/thread.h +++ b/zencore/include/zencore/thread.h @@ -4,6 +4,10 @@ #include "zencore.h" +#if !ZEN_PLATFORM_WINDOWS +# include <shared_mutex> +#endif + namespace zen { /** @@ -60,7 +64,11 @@ public: }; private: +#if ZEN_PLATFORM_WINDOWS void* m_Srw = nullptr; +#else + std::shared_mutex m_Mutex; +#endif }; /** Basic abstraction of a simple event synchronization mechanism (aka 'binary semaphore') diff --git a/zencore/thread.cpp b/zencore/thread.cpp index 03ecf3215..ffc17f79a 100644 --- a/zencore/thread.cpp +++ b/zencore/thread.cpp @@ -5,32 +5,51 @@ #include <fmt/format.h> #include <zencore/except.h> #include <zencore/string.h> -#include <zencore/windows.h> + +#if ZEN_PLATFORM_WINDOWS +# include <zencore/windows.h> +#endif namespace zen { void RwLock::AcquireShared() { +#if ZEN_PLATFORM_WINDOWS AcquireSRWLockShared((PSRWLOCK)&m_Srw); +#else + m_Mutex.lock_shared(); +#endif } void RwLock::ReleaseShared() { +#if ZEN_PLATFORM_WINDOWS ReleaseSRWLockShared((PSRWLOCK)&m_Srw); +#else + m_Mutex.unlock_shared(); +#endif } void RwLock::AcquireExclusive() { +#if ZEN_PLATFORM_WINDOWS AcquireSRWLockExclusive((PSRWLOCK)&m_Srw); +#else + m_Mutex.lock(); +#endif } void RwLock::ReleaseExclusive() { +#if ZEN_PLATFORM_WINDOWS ReleaseSRWLockExclusive((PSRWLOCK)&m_Srw); +#else + m_Mutex.unlock(); +#endif } Event::Event() |