cannam@3: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@3: cannam@3: /* cannam@3: Basic cross-platform mutex abstraction class. cannam@3: This file copyright 2007 Chris Cannam. cannam@3: */ cannam@3: cannam@3: #ifndef _MUTEX_H_ cannam@3: #define _MUTEX_H_ cannam@3: cannam@3: #ifdef _WIN32 cannam@3: #include cannam@3: #else cannam@3: #include cannam@3: #endif cannam@3: cannam@3: class Mutex cannam@3: { cannam@3: public: cannam@3: Mutex(); cannam@3: ~Mutex(); cannam@3: cannam@3: void lock(); cannam@3: void unlock(); cannam@3: bool trylock(); cannam@3: cannam@3: private: cannam@3: #ifdef _WIN32 cannam@3: HANDLE m_mutex; cannam@3: #ifndef NO_THREAD_CHECKS cannam@3: DWORD m_lockedBy; cannam@3: #endif cannam@3: #else cannam@3: pthread_mutex_t m_mutex; cannam@3: #ifndef NO_THREAD_CHECKS cannam@3: pthread_t m_lockedBy; cannam@3: bool m_locked; cannam@3: #endif cannam@3: #endif cannam@3: }; cannam@3: cannam@3: class MutexLocker cannam@3: { cannam@3: public: cannam@3: MutexLocker(Mutex *); cannam@3: ~MutexLocker(); cannam@3: cannam@3: private: cannam@3: Mutex *m_mutex; cannam@3: }; cannam@3: cannam@3: #endif cannam@3: