aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zencore/include/zencore/thread.h30
1 files changed, 24 insertions, 6 deletions
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: