]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common: add lockers for RWLocks
authorJosh Durgin <josh.durgin@inktank.com>
Thu, 21 Feb 2013 19:15:41 +0000 (11:15 -0800)
committerJosh Durgin <josh.durgin@inktank.com>
Thu, 21 Feb 2013 19:15:43 +0000 (11:15 -0800)
This makes them easier to use, especially instead of existing mutexes.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
src/common/RWLock.h

index f8915ed288e0e25fa53d455fc82fda8e2135e2d2..6fabc8c3083a8f8e07d4d5d01d23f97efc7969cd 100644 (file)
@@ -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_