ReadWriteLock.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_ReadWriteLock_hxx
00024 #define __ccxx_ReadWriteLock_hxx
00025
00026 #include <commonc++/Common.h++>
00027
00028 #ifdef CCXX_OS_WINDOWS
00029 #include <commonc++/CondVar.h++>
00030 #include <commonc++/Mutex.h++>
00031 #endif
00032
00033 #ifdef CCXX_OS_POSIX
00034 #include <pthread.h>
00035 #endif
00036
00037 namespace ccxx {
00038
00050 class COMMONCPP_API ReadWriteLock
00051 {
00052 public:
00053
00055 ReadWriteLock() throw();
00056
00058 ~ReadWriteLock() throw();
00059
00061 void lockRead() throw();
00062
00071 bool tryLockRead(timespan_ms_t timeout = 0) throw();
00072
00074 void lockWrite() throw();
00075
00084 bool tryLockWrite(timespan_ms_t timeout = 0) throw();
00085
00087 void unlock() throw();
00088
00090 static bool supportsTimedLocks() throw();
00091
00092 private:
00093
00094 #ifdef CCXX_OS_WINDOWS
00095 int _readersReading;
00096 int _writerWriting;
00097 Mutex _mutex;
00098 CondVar _lockFree;
00099 #else
00100 pthread_rwlock_t _lock;
00101 #endif
00102
00103 CCXX_COPY_DECLS(ReadWriteLock);
00104 };
00105
00106 };
00107
00108 #endif // __ccxx_ReadWriteLock_hxx
00109
00110