19 #ifndef INCLUDE_RCF_THREADLIBRARY_HPP
20 #define INCLUDE_RCF_THREADLIBRARY_HPP
22 #include <boost/noncopyable.hpp>
23 #include <boost/shared_ptr.hpp>
25 #include <RCF/Config.hpp>
26 #include <RCF/Export.hpp>
28 #include <RCF/AsioFwd.hpp>
29 #include <boost/cstdint.hpp>
30 #include <boost/noncopyable.hpp>
31 #include <boost/throw_exception.hpp>
39 typedef boost::noncopyable noncopyable;
43 #include <RCF/thread/event.hpp>
44 #include <RCF/thread/mutex.hpp>
45 #include <RCF/thread/thread.hpp>
46 #include <RCF/thread/tss_ptr.hpp>
52 typedef RCF::detail::thread Thread;
53 typedef RCF::detail::mutex Mutex;
54 typedef RCF::detail::mutex::scoped_lock Lock;
55 typedef RCF::detail::event Condition;
60 typedef pthread_t ThreadId;
64 class ThreadSpecificPtr :
public RCF::detail::tss_ptr<T>
67 void reset(T * pt = NULL)
69 RCF::detail::tss_ptr<T>::operator =(pt);
74 return RCF::detail::tss_ptr<T>::operator T*();
77 T * operator->()
const
79 return RCF::detail::tss_ptr<T>::operator T*();
82 typedef ThreadSpecificPtr Val;
89 class RCF_EXPORT ReadLock : boost::noncopyable
92 ReadLock(ReadWriteMutex &rwm);
102 class RCF_EXPORT WriteLock : boost::noncopyable
105 WriteLock(ReadWriteMutex &rwm);
111 ReadWriteMutex & rwm;
117 enum ReadWritePriority
123 class RCF_EXPORT ReadWriteMutex : boost::noncopyable
126 ReadWriteMutex(ReadWritePriority rwsp);
130 void waitOnReadUnlock(Lock &lock);
131 void notifyReadUnlock(Lock &lock);
135 Condition readUnlockEvent;
140 friend class ReadLock;
141 friend class WriteLock;
149 class RCF_EXPORT RecursiveMutex :
public RCF::detail::win_mutex
156 typedef Lock RecursiveLock;
164 class RCF_EXPORT RecursiveMutex : boost::noncopyable
172 friend class RCF::detail::scoped_lock<RecursiveMutex>;
178 Condition mCondition;
181 std::size_t mLockCount;
185 typedef RCF::detail::scoped_lock<RecursiveMutex> RecursiveLock;
189 typedef boost::shared_ptr<RecursiveLock> RecursiveLockPtr;
190 typedef boost::shared_ptr<RecursiveMutex> RecursiveMutexPtr;
192 typedef boost::shared_ptr<Thread> ThreadPtr;
193 typedef boost::shared_ptr<ReadWriteMutex> ReadWriteMutexPtr;
194 typedef boost::shared_ptr<Mutex> MutexPtr;
195 typedef boost::shared_ptr<Lock> LockPtr;
196 typedef boost::shared_ptr<Condition> ConditionPtr;
199 RCF_EXPORT ThreadId getCurrentThreadId();
202 RCF_EXPORT boost::uint32_t getCurrentTimeMs();
207 static const unsigned int MaxTimeoutMs = (((
unsigned int)-1)/10)*9;
208 RCF_EXPORT boost::uint32_t generateTimeoutMs(
unsigned int endTimeMs);
210 RCF_EXPORT Mutex & getRootMutex();
212 RCF_EXPORT
void sleepMs(boost::uint32_t msec);
215 #endif // ! INCLUDE_RCF_THREADLIBRARY_HPP