Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# Common/vtkCriticalSection.h

Go to the documentation of this file.

    00001 /*=========================================================================
    00002
    00003   Program:   Visualization Toolkit
    00004   Module:    $RCSfile: vtkCriticalSection.h,v $
    00005   Language:  C++
    00006
    00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
    00008   All rights reserved.
    00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
    00010
    00011      This software is distributed WITHOUT ANY WARRANTY; without even
    00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    00013      PURPOSE.  See the above copyright notice for more information.
    00014
    00015 =========================================================================*/
    00052 #ifndef __vtkCriticalSection_h
    00053 #define __vtkCriticalSection_h
    00054
    00055 #include "vtkObject.h"
    00056
    00057 //BTX
    00058
    00059 #ifdef VTK_USE_SPROC
    00060 #include <abi_mutex.h> // Needed for sproc implementation of mutex
    00061 typedef abilock_t vtkCritSecType;
    00062 #endif
    00063
    00064 #if defined(VTK_USE_PTHREADS) || defined(VTK_HP_PTHREADS)
    00065 #include <pthread.h> // Needed for pthreads implementation of mutex
    00066 typedef pthread_mutex_t vtkCritSecType;
    00067 #endif
    00068
    00069 #ifdef VTK_USE_WIN32_THREADS
    00070 #include <winbase.h> // Needed for win32 implementation of mutex
    00071 typedef CRITICAL_SECTION vtkCritSecType;
    00072 #endif
    00073
    00074 #ifndef VTK_USE_SPROC
    00075 #ifndef VTK_USE_PTHREADS
    00076 #ifndef VTK_USE_WIN32_THREADS
    00077 typedef int vtkCritSecType;
    00078 #endif
    00079 #endif
    00080 #endif
    00081
    00082 // Critical Section object that is not a vtkObject.
    00083 class VTK_COMMON_EXPORT vtkSimpleCriticalSection
    00084 {
    00085 public:
    00086   vtkSimpleCriticalSection()
    00087     {
    00088       this->Init();
    00089     }
    00090
    00091   vtkSimpleCriticalSection(int isLocked)
    00092     {
    00093       this->Init();
    00094       if(isLocked)
    00095         {
    00096         this->Lock();
    00097         }
    00098     }
    00099
    00100   void Init();
    00101
    00102   virtual ~vtkSimpleCriticalSection();
    00103
    00104   static vtkSimpleCriticalSection *New();
    00105
    00106   // What's the point of these (here and in MutexLock)? This class
    00107   // is not part of the hierarchy!! -CRV
    00108   virtual const char *GetClassName() {return "vtkSimpleCriticalSection";};
    00109   virtual int IsA(const char *name);
    00110   static vtkSimpleCriticalSection *SafeDownCast(vtkSimpleCriticalSection *o);
    00111
    00112   void Delete() {delete this;}
    00113
    00115   void Lock( void );
    00116
    00118   void Unlock( void );
    00119
    00120 protected:
    00121   vtkCritSecType   CritSec;
    00122 };
    00123
    00124 //ETX
    00125
    00126 class VTK_COMMON_EXPORT vtkCriticalSection : public vtkObject
    00127 {
    00128 public:
    00129   static vtkCriticalSection *New();
    00130
    00131   vtkTypeRevisionMacro(vtkCriticalSection,vtkObject);
    00132   void PrintSelf(ostream& os, vtkIndent indent);
    00133
    00135   void Lock( void );
    00136
    00138   void Unlock( void );
    00139
    00140 protected:
    00141   vtkSimpleCriticalSection   SimpleCriticalSection;
    00142   vtkCriticalSection() {};
    00143 private:
    00144   vtkCriticalSection(const vtkCriticalSection&);  // Not implemented.
    00145   void operator=(const vtkCriticalSection&);  // Not implemented.
    00146 };
    00147
    00148
    00149 inline void vtkCriticalSection::Lock( void )
    00150 {
    00151   this->SimpleCriticalSection.Lock();
    00152 }
    00153
    00154 inline void vtkCriticalSection::Unlock( void )
    00155 {
    00156   this->SimpleCriticalSection.Unlock();
    00157 }
    00158
    00159 #endif