00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __JackPosixMutex__
00023 #define __JackPosixMutex__
00024
00025 #include <pthread.h>
00026
00027 #include <assert.h>
00028 #include "JackError.h"
00029
00030 namespace Jack
00031 {
00036 class JackPosixMutex
00037 {
00038
00039 private:
00040
00041 pthread_mutex_t fMutex;
00042
00043 public:
00044
00045 JackPosixMutex()
00046 {
00047
00048 pthread_mutexattr_t mutex_attr;
00049 int res;
00050 res = pthread_mutexattr_init(&mutex_attr);
00051 assert(res == 0);
00052 res = pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);
00053 assert(res == 0);
00054 res = pthread_mutex_init(&fMutex, &mutex_attr);
00055 assert(res == 0);
00056 res = pthread_mutexattr_destroy(&mutex_attr);
00057 assert(res == 0);
00058 }
00059 ~JackPosixMutex()
00060 {
00061 pthread_mutex_destroy(&fMutex);
00062 }
00063
00064 void Lock()
00065 {
00066 int res = pthread_mutex_lock(&fMutex);
00067 if (res != 0)
00068 jack_error("JackPosixMutex::Lock res = %d", res);
00069 }
00070
00071 bool Trylock()
00072 {
00073 return (pthread_mutex_trylock(&fMutex) == 0);
00074 }
00075
00076 void Unlock()
00077 {
00078 int res = pthread_mutex_unlock(&fMutex);
00079 if (res != 0)
00080 jack_error("JackPosixMutex::Unlock res = %d", res);
00081 }
00082
00083 };
00084
00085
00086 }
00087
00088 #endif