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 #include <pthread.h>
00034 #endif
00035
00065 class SbThreadMutex {
00066
00067 public:
00071 SbThreadMutex();
00072
00073 #if 1 SoDEPRECATED
00075 SbThreadMutex( const SbBool force );
00076 #endif
00078 #ifndef HIDDEN_FROM_DOC
00079 ~SbThreadMutex() ;
00080 #endif // HIDDEN_FROM_DOC
00081
00092 int lock()
00093 { if (mutex) return _lock(); else return 0; }
00094
00102 int unlock()
00103 { if (mutex) return _unlock(); else return 0; }
00104
00112 SbBool trylock()
00113 { if (mutex) return _trylock(); else return 0; }
00114
00115 private:
00116 #if defined(__linux__) || defined(__APPLE__)
00117 pthread_mutex_t* getMutex() { return mutex; }
00118 #endif
00119
00120 private:
00121
00122 #ifdef _WIN32
00123 void* mutex;
00124 #if defined(_DEBUG)
00125 LONG volatile numLocks;
00126 unsigned int m_lockOwner;
00127 #endif
00128 #else
00129 pthread_mutex_t* mutex ;
00130 pthread_mutexattr_t* mta;
00131 pthread_t thread_id ;
00132 int count ;
00133 #endif
00134 private:
00135
00136
00137 SbThreadMutex(const SbThreadMutex& )
00138 {
00139 }
00140
00141
00142
00143 int _lock() ;
00144 int _unlock() ;
00145 SbBool _trylock();
00146
00148 void commonConstructor();
00149 };
00150
00151
00152 #include <Inventor/threads/SbThreadAutoLock.h>
00153
00154 #endif // _SB_THREAD_MUTEX_H_
00155
00156
00157