00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _SB_THREAD_MUTEX_H_
00026 #define _SB_THREAD_MUTEX_H_
00027
00028 #include <Inventor/SbBase.h>
00029
00030 #ifdef _WIN32
00031
00032 #else
00033 #ifdef OIV_MULTI_THREADS
00034 #include <pthread.h>
00035 #endif // OIV_MULTI_THREADS
00036 #endif
00037
00068 class SbThreadMutex {
00069
00070 public:
00074 SbThreadMutex(const SbBool force = FALSE) ;
00075
00076 #ifndef HIDDEN_FROM_DOC
00077 ~SbThreadMutex() ;
00078 #endif // HIDDEN_FROM_DOC
00079
00090 int lock()
00091 { if (mutex) return _lock(); else return 0; }
00092
00100 int unlock()
00101 { if (mutex) return _unlock(); else return 0; }
00102
00110 SbBool trylock()
00111 { if (mutex) return _trylock(); else return 0; }
00112
00113 private:
00114 #if defined(__linux__) || defined(__APPLE__) || defined(sun)
00115 pthread_mutex_t* getMutex() { return mutex; }
00116 #endif
00117
00118 private:
00119
00120 #ifdef _WIN32
00121 void* mutex;
00122 #if defined(_DEBUG)
00123 LONG volatile numLocks;
00124 unsigned int m_lockOwner;
00125 #endif
00126 #else
00127 pthread_mutex_t* mutex ;
00128 pthread_mutexattr_t* mta;
00129 pthread_t thread_id ;
00130 int count ;
00131 #endif
00132 private:
00133
00134
00135 SbThreadMutex(const SbThreadMutex& )
00136 {
00137 }
00138
00139
00140
00141 int _lock() ;
00142 int _unlock() ;
00143 SbBool _trylock();
00144 };
00145
00146
00147 #include <Inventor/threads/SbThreadAutoLock.h>
00148
00149 #endif // _SB_THREAD_MUTEX_H_
00150
00151
00152