Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef LOCK_H
00016 #define LOCK_H
00017
00023 #include "ApexInterface.h"
00024
00025 namespace nvidia
00026 {
00027 namespace apex
00028 {
00029
00040 class ReadLock
00041 {
00042 ReadLock(const ReadLock&);
00043 ReadLock& operator=(const ReadLock&);
00044
00045 public:
00046
00053 ReadLock(const ApexInterface& lockable, const char* file=NULL, uint32_t line=0)
00054 : mLockable(lockable)
00055 {
00056 mLockable.acquireReadLock(file, line);
00057 }
00058
00059 ~ReadLock()
00060 {
00061 mLockable.releaseReadLock();
00062 }
00063
00064 private:
00065
00066 const ApexInterface& mLockable;
00067 };
00068
00079 class WriteLock
00080 {
00081 WriteLock(const WriteLock&);
00082 WriteLock& operator=(const WriteLock&);
00083
00084 public:
00085
00092 WriteLock(const ApexInterface& lockable, const char* file=NULL, uint32_t line=0)
00093 : mLockable(lockable)
00094 {
00095 mLockable.acquireWriteLock(file, line);
00096 }
00097
00098 ~WriteLock()
00099 {
00100 mLockable.releaseWriteLock();
00101 }
00102
00103 private:
00104 const ApexInterface& mLockable;
00105 };
00106
00107
00108 }
00109 }
00110
00114 #define WRITE_LOCK(LOCKABLE) nvidia::apex::WriteLock __WriteLock(LOCKABLE, __FILE__, __LINE__);
00115
00118 #define READ_LOCK(LOCKABLE) nvidia::apex::ReadLock __ReadLock(LOCKABLE, __FILE__, __LINE__);
00119
00121 #endif