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 #include <stdio.h>
00027 #include <assert.h>
00028 #include "JackError.h"
00029
00030 namespace Jack
00031 {
00036 class JackPosixMutex
00037 {
00038
00039 protected:
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
00060 virtual ~JackPosixMutex()
00061 {
00062 pthread_mutex_destroy(&fMutex);
00063 }
00064
00065 void Lock()
00066 {
00067 int res = pthread_mutex_lock(&fMutex);
00068 if (res != 0)
00069 jack_error("JackPosixMutex::Lock res = %d", res);
00070 }
00071
00072 bool Trylock()
00073 {
00074 return (pthread_mutex_trylock(&fMutex) == 0);
00075 }
00076
00077 void Unlock()
00078 {
00079 int res = pthread_mutex_unlock(&fMutex);
00080 if (res != 0)
00081 jack_error("JackPosixMutex::Unlock res = %d", res);
00082 }
00083
00084 };
00085
00086
00087 }
00088
00089 #endif