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>
47 #ifdef RCF_USE_BOOST_TLS
48 #include <boost/thread/tss.hpp>
50 #include <RCF/thread/tss_ptr.hpp>
57 typedef RCF::detail::thread Thread;
58 typedef RCF::detail::mutex Mutex;
59 typedef RCF::detail::mutex::scoped_lock Lock;
60 typedef RCF::detail::event Condition;
65 typedef pthread_t ThreadId;
68 #ifdef RCF_USE_BOOST_TLS
71 class ThreadSpecificPtr :
public boost::thread_specific_ptr<T>
78 class ThreadSpecificPtr :
public RCF::detail::tss_ptr<T>
81 void reset(T * pt = NULL)
83 RCF::detail::tss_ptr<T>::operator =(pt);
88 return RCF::detail::tss_ptr<T>::operator T*();
91 T * operator->()
const
93 return RCF::detail::tss_ptr<T>::operator T*();
96 typedef ThreadSpecificPtr Val;
103 class ReadWriteMutex;
105 class RCF_EXPORT ReadLock : boost::noncopyable
108 ReadLock(ReadWriteMutex &rwm);
114 ReadWriteMutex & rwm;
118 class RCF_EXPORT WriteLock : boost::noncopyable
121 WriteLock(ReadWriteMutex &rwm);
127 ReadWriteMutex & rwm;
133 enum ReadWritePriority
139 class RCF_EXPORT ReadWriteMutex : boost::noncopyable
142 ReadWriteMutex(ReadWritePriority rwsp);
146 void waitOnReadUnlock(Lock &lock);
147 void notifyReadUnlock(Lock &lock);
151 Condition readUnlockEvent;
156 friend class ReadLock;
157 friend class WriteLock;
165 class RCF_EXPORT RecursiveMutex :
public RCF::detail::win_mutex
172 typedef Lock RecursiveLock;
180 class RCF_EXPORT RecursiveMutex : boost::noncopyable
188 friend class RCF::detail::scoped_lock<RecursiveMutex>;
194 Condition mCondition;
197 std::size_t mLockCount;
201 typedef RCF::detail::scoped_lock<RecursiveMutex> RecursiveLock;
205 typedef boost::shared_ptr<RecursiveLock> RecursiveLockPtr;
206 typedef boost::shared_ptr<RecursiveMutex> RecursiveMutexPtr;
208 typedef boost::shared_ptr<Thread> ThreadPtr;
209 typedef boost::shared_ptr<ReadWriteMutex> ReadWriteMutexPtr;
210 typedef boost::shared_ptr<Mutex> MutexPtr;
211 typedef boost::shared_ptr<Lock> LockPtr;
212 typedef boost::shared_ptr<Condition> ConditionPtr;
215 RCF_EXPORT ThreadId getCurrentThreadId();
218 RCF_EXPORT boost::uint32_t getCurrentTimeMs();
223 static const unsigned int MaxTimeoutMs = (((
unsigned int)-1)/10)*9;
224 RCF_EXPORT boost::uint32_t generateTimeoutMs(
unsigned int endTimeMs);
226 RCF_EXPORT Mutex & getRootMutex();
228 RCF_EXPORT
void sleepMs(boost::uint32_t msec);
231 #endif // ! INCLUDE_RCF_THREADLIBRARY_HPP