From a25d2425e3dd9ef2d5299e7e5045819b6bdbc2a7 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 24 May 2021 21:03:13 +0200 Subject: Added support for early release of scoped RWLock helpers --- zencore/include/zencore/thread.h | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'zencore/include') diff --git a/zencore/include/zencore/thread.h b/zencore/include/zencore/thread.h index 48afad33f..46b251e07 100644 --- a/zencore/include/zencore/thread.h +++ b/zencore/include/zencore/thread.h @@ -25,20 +25,38 @@ public: struct SharedLockScope { - SharedLockScope(RwLock& lock) : m_Lock(lock) { m_Lock.AcquireShared(); } - ~SharedLockScope() { m_Lock.ReleaseShared(); } + SharedLockScope(RwLock& Lock) : m_Lock(&Lock) { Lock.AcquireShared(); } + ~SharedLockScope() { ReleaseNow(); } + + void ReleaseNow() + { + if (m_Lock) + { + m_Lock->ReleaseShared(); + m_Lock = nullptr; + } + } private: - RwLock& m_Lock; + RwLock* m_Lock; }; struct ExclusiveLockScope { - ExclusiveLockScope(RwLock& lock) : m_Lock(lock) { m_Lock.AcquireExclusive(); } - ~ExclusiveLockScope() { m_Lock.ReleaseExclusive(); } + ExclusiveLockScope(RwLock& Lock) : m_Lock(&Lock) { Lock.AcquireExclusive(); } + ~ExclusiveLockScope() { ReleaseNow(); } + + void ReleaseNow() + { + if (m_Lock) + { + m_Lock->ReleaseExclusive(); + m_Lock = nullptr; + } + } private: - RwLock& m_Lock; + RwLock* m_Lock; }; private: -- cgit v1.2.3