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 <windows.h>
fazekasgy@37: #else
fazekasgy@37: #include <pthread.h>
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: