00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __JackMutex__
00023 #define __JackMutex__
00024
00025 #include <assert.h>
00026 #include "JackError.h"
00027 #include "JackPlatformPlug.h"
00028
00029
00030 namespace Jack
00031 {
00036 class JackLockAble
00037 {
00038
00039 private:
00040
00041 JackMutex fMutex;
00042
00043 protected:
00044
00045 JackLockAble()
00046 {}
00047 ~JackLockAble()
00048 {}
00049
00050 public:
00051
00052 void Lock()
00053 {
00054 fMutex.Lock();
00055 }
00056
00057 bool Trylock()
00058 {
00059 return fMutex.Trylock();
00060 }
00061
00062 void Unlock()
00063 {
00064 fMutex.Unlock();
00065 }
00066
00067 };
00068
00069 class JackLock
00070 {
00071 private:
00072
00073 JackLockAble* fObj;
00074
00075 public:
00076
00077 JackLock(JackLockAble* obj): fObj(obj)
00078 {
00079 fObj->Lock();
00080 }
00081
00082 JackLock(const JackLockAble* obj): fObj((JackLockAble*)obj)
00083 {
00084 fObj->Lock();
00085 }
00086
00087 ~JackLock()
00088 {
00089 fObj->Unlock();
00090 }
00091 };
00092
00093
00094 }
00095
00096 #endif