]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/mutex.h
New system_error exception class
[libs/core.git] / source / core / mutex.h
index 8088a2839dbd21a15b8567f3768e850d5c5bb583..c0c26829630b9dee55bdabf885fd76a6a87ca4f5 100644 (file)
@@ -4,6 +4,7 @@ This file is part of libmspcore
 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
+
 #ifndef MSP_CORE_MUTEX_H_
 #define MSP_CORE_MUTEX_H_
 
@@ -14,6 +15,11 @@ namespace Msp {
 
 class Mutex
 {
+       friend class Semaphore;
+
+private:
+       MutexHandle mutex;
+
 public:
 #ifndef WIN32
        Mutex()       { pthread_mutex_init(&mutex, 0); }
@@ -22,16 +28,12 @@ public:
        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;
 };
 
 /**
@@ -39,14 +41,15 @@ Locks the mutex for te lifetime of the object.
 */
 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 &);
 };
@@ -63,7 +66,7 @@ public:
 
        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;
@@ -77,7 +80,7 @@ public:
        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;