CriticalSection.h++
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __ccxx_CriticalSection_hxx
00024 #define __ccxx_CriticalSection_hxx
00025
00026 #include <commonc++/Common.h++>
00027 #include <commonc++/Lock.h++>
00028 #ifndef CCXX_OS_WINDOWS
00029 #include <commonc++/AtomicCounter.h++>
00030 #include <commonc++/ThreadLocalCounter.h++>
00031 #include <commonc++/Random.h++>
00032 #endif
00033
00034 namespace ccxx {
00035
00051 class COMMONCPP_API CriticalSection : public Lock
00052 {
00053 public:
00054
00056 CriticalSection() throw();
00057
00061 ~CriticalSection() throw();
00062
00064 void enter() throw();
00065
00067 inline void lock() throw()
00068 { enter(); }
00069
00076 bool tryEnter() throw();
00077
00079 void leave() throw();
00080
00083 inline void unlock() throw()
00084 { leave(); }
00085
00086 private:
00087
00088 #ifdef CCXX_OS_WINDOWS
00089 CRITICAL_SECTION _lock;
00090 #else
00091 AtomicCounter _lock;
00092 ThreadLocalCounter _counter;
00093 Random _rand;
00094 #endif
00095 };
00096
00097 };
00098
00099 #endif // __ccxx_CriticalSection_hxx
00100
00101