aboutsummaryrefslogtreecommitdiff
path: root/lib/base/elock.h
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-06-14 12:46:29 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-06-14 12:46:29 +0000
commitbe7160f4c15f23e853a3a0ad7b0ad54107ed9ca1 (patch)
tree769958d29a0b694b28c37c3b2d3f75921f10bbaa /lib/base/elock.h
parenta7df600c514e420df8a7774c6ea8aafb91569a23 (diff)
downloadenigma2-be7160f4c15f23e853a3a0ad7b0ad54107ed9ca1.tar.gz
enigma2-be7160f4c15f23e853a3a0ad7b0ad54107ed9ca1.zip
use read/write lock for eCueSheet
Diffstat (limited to 'lib/base/elock.h')
-rw-r--r--lib/base/elock.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/base/elock.h b/lib/base/elock.h
index 7bf25eba..51582e67 100644
--- a/lib/base/elock.h
+++ b/lib/base/elock.h
@@ -18,6 +18,65 @@ public:
}
};
+class eRdWrLock
+{
+ friend class eRdLocker;
+ friend class eWrLocker;
+ pthread_rwlock_t m_lock;
+ eRdWrLock(eRdWrLock &);
+public:
+ eRdWrLock()
+ {
+ pthread_rwlock_init(&m_lock, 0);
+ }
+ ~eRdWrLock()
+ {
+ pthread_rwlock_destroy(&m_lock);
+ }
+ void RdLock()
+ {
+ pthread_rwlock_rdlock(&m_lock);
+ }
+ void WrLock()
+ {
+ pthread_rwlock_wrlock(&m_lock);
+ }
+ void Unlock()
+ {
+ pthread_rwlock_unlock(&m_lock);
+ }
+};
+
+class eRdLocker
+{
+ eRdWrLock &m_lock;
+public:
+ eRdLocker(eRdWrLock &m)
+ : m_lock(m)
+ {
+ pthread_rwlock_rdlock(&m_lock.m_lock);
+ }
+ ~eRdLocker()
+ {
+ pthread_rwlock_unlock(&m_lock.m_lock);
+ }
+};
+
+class eWrLocker
+{
+ eRdWrLock &m_lock;
+public:
+ eWrLocker(eRdWrLock &m)
+ : m_lock(m)
+ {
+ pthread_rwlock_wrlock(&m_lock.m_lock);
+ }
+ ~eWrLocker()
+ {
+ pthread_rwlock_unlock(&m_lock.m_lock);
+ }
+};
+
class eSingleLock
{
friend class eSingleLocker;