00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef _SK_RT_THREAD_ABSTRACTLOCK_H_
00012 #define _SK_RT_THREAD_ABSTRACTLOCK_H_
00013
00014 #include <sk/util/Holder.hxx>
00015
00016 #include <sk/rt/Lock.h>
00017 #include <sk/rt/thread/abstract/Mutex.h>
00018
00019 #include <ostream>
00020
00021 namespace sk {
00022 namespace rt {
00023 namespace thread {
00024 class AbstractLock
00025 : public virtual sk::rt::Lock
00026 {
00027 public:
00028 virtual ~AbstractLock();
00029
00030
00031 void lock();
00032 bool tryLock();
00033 void unlock();
00034
00035
00036 const sk::util::Class getClass() const;
00037 const sk::util::String inspect() const;
00038
00039 protected:
00040 AbstractLock(abstract::Mutex* mutex, bool ownership);
00041
00042 bool tryLockCheck() const;
00043 virtual void collectInspectInfo(std::ostream& stream) const;
00044
00045 private:
00046 AbstractLock(const AbstractLock& other);
00047 AbstractLock& operator = (const AbstractLock& other);
00048
00049 void registerOwnership();
00050
00051 sk::util::Holder<abstract::Mutex> _mutexHolder;
00052 uint64_t _lastOwner;
00053 bool _ownership;
00054 };
00055 }
00056 }
00057 }
00058
00059 #endif