00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __itkMutexLock_h
00021 #define __itkMutexLock_h
00022
00023 #include "itkObject.h"
00024 #include "itkObjectFactory.h"
00025
00026 #ifdef ITK_USE_SPROC
00027 #include <abi_mutex.h>
00028 #endif
00029
00030 #ifdef ITK_USE_PTHREADS
00031 #include <pthread.h>
00032 #endif
00033
00034 #ifdef ITK_USE_WIN32_THREADS
00035 #include "itkWindows.h"
00036 #endif
00037
00038 namespace itk
00039 {
00040
00041 #ifdef ITK_USE_SPROC
00042 typedef abilock_t MutexType;
00043 #endif
00044
00045 #ifdef ITK_USE_PTHREADS
00046 typedef pthread_mutex_t MutexType;
00047 #endif
00048
00049 #ifdef ITK_USE_WIN32_THREADS
00050 typedef HANDLE MutexType;
00051 #endif
00052
00053 #ifndef ITK_USE_SPROC
00054 #ifndef ITK_USE_PTHREADS
00055 #ifndef ITK_USE_WIN32_THREADS
00056 typedef int MutexType;
00057 #endif
00058 #endif
00059 #endif
00060
00070 class ITKCommon_EXPORT SimpleMutexLock
00071 {
00072 public:
00074 typedef SimpleMutexLock Self;
00075
00077 SimpleMutexLock();
00078 virtual ~SimpleMutexLock();
00079
00081 static SimpleMutexLock *New();
00082 void Delete() {delete this;}
00083
00085 virtual const char *GetNameOfClass() {return "itkSimpleMutexLock";};
00086
00088 void Lock( void );
00089
00091 void Unlock( void );
00092
00094 MutexType& GetMutexLock()
00095 {
00096 return m_MutexLock;
00097 }
00098 const MutexType GetMutexLock() const
00099 {
00100 return m_MutexLock;
00101 }
00102
00103 protected:
00104 MutexType m_MutexLock;
00105 };
00106
00116 class ITKCommon_EXPORT MutexLock : public Object
00117 {
00118 public:
00120 typedef MutexLock Self;
00121 typedef Object Superclass;
00122 typedef SmartPointer<Self> Pointer;
00123 typedef SmartPointer<const Self> ConstPointer;
00124
00126 itkNewMacro(Self);
00127
00129 itkTypeMacro(MutexLock,Object);
00130
00132 void Lock( void );
00133
00135 void Unlock( void );
00136
00137 protected:
00138 MutexLock() {}
00139 ~MutexLock() {}
00140
00141 SimpleMutexLock m_SimpleMutexLock;
00142 void PrintSelf(std::ostream& os, Indent indent) const;
00143
00144 private:
00145 MutexLock(const Self&);
00146 void operator=(const Self&);
00147 };
00148
00149
00150 inline void MutexLock::Lock( void )
00151 {
00152 m_SimpleMutexLock.Lock();
00153 }
00154
00155 inline void MutexLock::Unlock( void )
00156 {
00157 m_SimpleMutexLock.Unlock();
00158 }
00159
00160
00161 }
00162 #endif