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