12 #ifndef TMCAUTOLOCK_HH
13 #define TMCAUTOLOCK_HH
88 #define TMCMULTITHREADED 1
91 #if defined(TMCMULTITHREADED)
94 typedef pthread_mutex_t TMCMutex;
95 #define TMCMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
96 #define TMCMUTEXLOCK pthread_mutex_lock
97 #define TMCMUTEXUNLOCK pthread_mutex_unlock
98 typedef int (*TMCthread_lock)(TMCMutex *);
99 typedef int (*TMCthread_unlock)(TMCMutex *);
101 typedef int TMCMutex;
102 int fake_mutex_lock_unlock(TMCMutex *);
103 #define TMCMUTEX_INITIALIZER 1
104 #define TMCMUTEXLOCK fake_mutex_lock_unlock
105 #define TMCMUTEXUNLOCK fake_mutex_lock_unlock
106 typedef int (*TMCthread_lock)(TMCMutex *);
107 typedef int (*TMCthread_unlock)(TMCMutex *);
117 template <
class M,
typename L,
typename U>
118 class TMCTemplateAutoLock {
120 TMCTemplateAutoLock(M *mtx, L l, U u) : locked(false), _m(mtx), _l(l), _u(u) { lock(); }
122 virtual ~TMCTemplateAutoLock() { unlock(); }
141 TMCTemplateAutoLock(
const TMCTemplateAutoLock &rhs);
142 TMCTemplateAutoLock &operator=(
const TMCTemplateAutoLock &rhs);
155 struct TMCImpMutexAutoLock :
public TMCTemplateAutoLock<TMCMutex, TMCthread_lock, TMCthread_unlock> {
156 TMCImpMutexAutoLock(TMCMutex *mtx)
157 : TMCTemplateAutoLock<TMCMutex, TMCthread_lock, TMCthread_unlock>(mtx, &TMCMUTEXLOCK, &TMCMUTEXUNLOCK)
161 typedef TMCImpMutexAutoLock TMCAutoLock;
163 #endif // TMCAUTOLOCK_HH