diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/Threads.h | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/includes/Threads.h b/includes/Threads.h index 23d664f..46ea365 100644 --- a/includes/Threads.h +++ b/includes/Threads.h @@ -15,7 +15,8 @@ class Lock { void enter() { pthread_mutex_lock(&m_lock); } void leave() { pthread_mutex_unlock(&m_lock); } private: - Lock(const Lock &); + Lock(const Lock &) = delete; + Lock & operator=(const Lock &) = delete; pthread_mutex_t m_lock; template<class T> friend class Queue; @@ -26,7 +27,8 @@ class ScopeLock { ScopeLock(Lock & lock) : m_lock(lock) { m_lock.enter(); } ~ScopeLock() { m_lock.leave(); } private: - ScopeLock(const ScopeLock &); + ScopeLock(const ScopeLock &) = delete; + ScopeLock & operator=(const ScopeLock &) = delete; Lock & m_lock; }; @@ -38,7 +40,8 @@ class RWLock { void enterW() { pthread_rwlock_wrlock(&m_lock); } void leave() { pthread_rwlock_unlock(&m_lock); } private: - RWLock(const RWLock &); + RWLock(const RWLock &) = delete; + RWLock & operator=(const ScopeLock &) = delete; pthread_rwlock_t m_lock; }; @@ -47,7 +50,8 @@ class ScopeLockR { ScopeLockR(RWLock & lock) : m_lock(lock) { m_lock.enterR(); } ~ScopeLockR() { m_lock.leave(); } private: - ScopeLockR(const ScopeLockR &); + ScopeLockR(const ScopeLockR &) = delete; + ScopeLockR & operator=(const ScopeLockR &) = delete; RWLock & m_lock; }; @@ -56,7 +60,8 @@ class ScopeLockW { ScopeLockW(RWLock & lock) : m_lock(lock) { m_lock.enterW(); } ~ScopeLockW() { m_lock.leave(); } private: - ScopeLockW(const ScopeLockW &); + ScopeLockW(const ScopeLockW &) = delete; + ScopeLockW & operator=(const ScopeLockW &) = delete; RWLock & m_lock; }; @@ -72,6 +77,8 @@ class Thread { virtual void * proc() = 0; virtual void threadExit() { }; private: + Thread(const Thread &) = delete; + Thread & operator=(const Thread &) = delete; pthread_t m_thread; volatile bool m_joined; @@ -82,6 +89,8 @@ class GlobalThread : public Thread, public AtStart, public AtExit { protected: GlobalThread(int startOrder = 10) : AtStart(startOrder), AtExit(1) { } private: + GlobalThread(const GlobalThread &) = delete; + GlobalThread & operator=(const GlobalThread &) = delete; virtual void doStart() { threadStart(); } virtual void doExit() { join(); } }; @@ -102,11 +111,13 @@ class Queue { m_back = c; pthread_cond_signal(&m_cond); } - T * pop() { + T * pop(bool wait = true) { ScopeLock sl(m_lock); - while (!m_front) + while (!m_front && wait) pthread_cond_wait(&m_cond, &m_lock.m_lock); Cell * c = m_front; + if (!c) + return NULL; m_front = c->m_next; if (m_front) m_front->m_prev = NULL; @@ -121,10 +132,13 @@ class Queue { return !m_front; } private: + Queue(const Queue &) = delete; + Queue & operator=(const Queue &) = delete; Lock m_lock; - class Cell { - public: + struct Cell { Cell(T * elem) : m_next(NULL), m_prev(NULL), m_elem(elem) { } + Cell(const Cell &) = delete; + Cell & operator=(const Cell &) = delete; Cell * m_next, * m_prev; T * m_elem; }; |