summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/RWLock.h27
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_