00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00018 #ifndef LIBCWD_PRIVATE_MUTEX_H
00019 #define LIBCWD_PRIVATE_MUTEX_H
00020
00021 #ifndef LIBCW_PTHREAD_H
00022 #define LIBCW_PTHREAD_H
00023 #include <pthread.h>
00024 #endif
00025
00026 namespace libcwd {
00027 namespace _private_ {
00028 #if CWDEBUG_DEBUGT
00029 struct TSD_st;
00030 #endif
00031
00032 class mutex_ct {
00033 private:
00034 pthread_mutex_t M_mutex;
00035 public:
00036 #if CWDEBUG_DEBUG || CWDEBUG_DEBUGT
00037 int M_instance_locked;
00038 #endif
00039 #if CWDEBUG_DEBUGT
00040 pthread_t M_locked_by;
00041 void const* M_locked_from;
00042 #endif
00043 protected:
00044 bool M_initialized;
00045 void M_initialize(void);
00046 public:
00047 void initialize(void);
00048 public:
00049 bool trylock(void);
00050 void lock(void);
00051 void unlock(void);
00052 #if CWDEBUG_DEBUGT
00053 bool trylock(TSD_st&);
00054 void lock(TSD_st&);
00055 void unlock(TSD_st&);
00056 #endif
00057 #if CWDEBUG_DEBUG || CWDEBUG_DEBUGT
00058 bool is_locked(void);
00059 #endif
00060 };
00061
00062 }
00063 }
00064
00065 #endif // LIBCWD_PRIVATE_MUTEX_H
00066