Copyright © 2006 Mikko Rasa, Mikkosoft Productions
Distributed under the LGPL
*/
+
#ifndef MSP_CORE_MUTEX_H_
#define MSP_CORE_MUTEX_H_
class Mutex
{
+ friend class Semaphore;
+
+private:
+ MutexHandle mutex;
+
public:
#ifndef WIN32
Mutex() { pthread_mutex_init(&mutex, 0); }
int unlock() { return pthread_mutex_unlock(&mutex); }
~Mutex() { pthread_mutex_destroy(&mutex); }
#else
- Mutex() { mutex=CreateMutex(0, false, 0); }
+ Mutex() { mutex = CreateMutex(0, false, 0); }
int lock() { return WaitForSingleObject(mutex, INFINITE)==WAIT_OBJECT_0; }
int trylock() { return WaitForSingleObject(mutex, 0)==WAIT_OBJECT_0; }
int unlock() { return !ReleaseMutex(mutex); }
~Mutex() { CloseHandle(mutex); }
#endif
-private:
- MutexHandle mutex;
-
- friend class Semaphore;
};
/**
*/
class MutexLock
{
+private:
+ Mutex &mutex;
+
public:
- MutexLock(Mutex &m, bool l=true): mutex(m) { if(l) mutex.lock(); }
+ MutexLock(Mutex &m, bool l = true): mutex(m) { if(l) mutex.lock(); }
~MutexLock() { mutex.unlock(); }
int lock() { return mutex.lock(); }
private:
- Mutex &mutex;
-
MutexLock(const MutexLock &);
MutexLock &operator=(const MutexLock &);
};
T &operator*() const { return *data; }
T *operator->() const { return data; }
- void clear() { mutex=0; data=0; }
+ void clear() { mutex=0; data = 0; }
private:
RefPtr<MutexLock> mutex;
T *data;
MutexPtr(const MutexPtr<T> &p): RefCount(p), mutex(p.mutex), data(p.data) { }
T &operator*() const { return *data; }
T *operator->() const { return data; }
- void clear() { decref(); data=0; }
+ void clear() { decref(); data = 0; }
~MutexPtr() { decref(); }
protected:
Mutex &mutex;