aboutsummaryrefslogtreecommitdiff
path: root/zencore/include
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-24 21:03:13 +0200
committerStefan Boberg <[email protected]>2021-05-24 21:03:13 +0200
commita25d2425e3dd9ef2d5299e7e5045819b6bdbc2a7 (patch)
treec969934f81aecb8cc4dd97778fe82c50930ddff2 /zencore/include
parentAdded std::hash<IoHash> implementation for convenience (diff)
downloadzen-a25d2425e3dd9ef2d5299e7e5045819b6bdbc2a7.tar.xz
zen-a25d2425e3dd9ef2d5299e7e5045819b6bdbc2a7.zip
Added support for early release of scoped RWLock helpers
Diffstat (limited to 'zencore/include')
-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: