diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-06-14 12:46:29 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-06-14 12:46:29 +0000 |
| commit | be7160f4c15f23e853a3a0ad7b0ad54107ed9ca1 (patch) | |
| tree | 769958d29a0b694b28c37c3b2d3f75921f10bbaa /lib/base/elock.h | |
| parent | a7df600c514e420df8a7774c6ea8aafb91569a23 (diff) | |
| download | enigma2-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.h | 59 |
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; |
