diff options
-rw-r--r-- | src/common/RWLock.h | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/common/RWLock.h b/src/common/RWLock.h index f8915ed288e..6fabc8c3083 100644 --- a/src/common/RWLock.h +++ b/src/common/RWLock.h @@ -48,7 +48,7 @@ public: // read void get_read() { if (g_lockdep) id = lockdep_will_lock(name, id); - pthread_rwlock_rdlock(&L); + pthread_rwlock_rdlock(&L); if (g_lockdep) id = lockdep_locked(name, id); } bool try_get_read() { @@ -78,6 +78,31 @@ public: void put_write() { unlock(); } + +public: + class RLocker { + RWLock &m_lock; + + public: + RLocker(RWLock& lock) : m_lock(lock) { + m_lock.get_read(); + } + ~RLocker() { + m_lock.put_read(); + } + }; + + class WLocker { + RWLock &m_lock; + + public: + WLocker(RWLock& lock) : m_lock(lock) { + m_lock.get_write(); + } + ~WLocker() { + m_lock.put_write(); + } + }; }; #endif // !_Mutex_Posix_ |