diff -r 000000000000 -r bde4ae8d615e os/ossrv/ossrv_pub/boost_apis/boost/thread/recursive_mutex.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/ossrv_pub/boost_apis/boost/thread/recursive_mutex.hpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,184 @@ +// Copyright (C) 2001-2003 +// William E. Kempf +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_RECURSIVE_MUTEX_WEK070601_HPP +#define BOOST_RECURSIVE_MUTEX_WEK070601_HPP + +#include + +#include +#include + +#if defined(BOOST_HAS_PTHREADS) +# include +#endif + +#if defined(BOOST_HAS_MPTASKS) +# include "scoped_critical_region.hpp" +#endif + +namespace boost { + +struct xtime; +// disable warnings about non dll import +// see: http://www.boost.org/more/separate_compilation.html#dlls +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4251 4231 4660 4275) +#endif +class BOOST_THREAD_DECL recursive_mutex + : private noncopyable +{ +public: + friend class detail::thread::lock_ops; + + typedef detail::thread::scoped_lock scoped_lock; + + recursive_mutex(); + ~recursive_mutex(); + +private: +#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS)) + typedef std::size_t cv_state; +#elif defined(BOOST_HAS_PTHREADS) + struct cv_state + { + long count; + pthread_mutex_t* pmutex; + }; +#endif + void do_lock(); + void do_unlock(); + void do_lock(cv_state& state); + void do_unlock(cv_state& state); + +#if defined(BOOST_HAS_WINTHREADS) + void* m_mutex; + bool m_critical_section; + unsigned long m_count; +#elif defined(BOOST_HAS_PTHREADS) + pthread_mutex_t m_mutex; + unsigned m_count; +# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE) + pthread_cond_t m_unlocked; + pthread_t m_thread_id; + bool m_valid_id; +# endif +#elif defined(BOOST_HAS_MPTASKS) + threads::mac::detail::scoped_critical_region m_mutex; + threads::mac::detail::scoped_critical_region m_mutex_mutex; + std::size_t m_count; +#endif +}; + +class BOOST_THREAD_DECL recursive_try_mutex + : private noncopyable +{ +public: + friend class detail::thread::lock_ops; + + typedef detail::thread::scoped_lock scoped_lock; + typedef detail::thread::scoped_try_lock< + recursive_try_mutex> scoped_try_lock; + + recursive_try_mutex(); + ~recursive_try_mutex(); + +private: +#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS)) + typedef std::size_t cv_state; +#elif defined(BOOST_HAS_PTHREADS) + struct cv_state + { + long count; + pthread_mutex_t* pmutex; + }; +#endif + void do_lock(); + bool do_trylock(); + void do_unlock(); + void do_lock(cv_state& state); + void do_unlock(cv_state& state); + +#if defined(BOOST_HAS_WINTHREADS) + void* m_mutex; + bool m_critical_section; + unsigned long m_count; +#elif defined(BOOST_HAS_PTHREADS) + pthread_mutex_t m_mutex; + unsigned m_count; +# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE) + pthread_cond_t m_unlocked; + pthread_t m_thread_id; + bool m_valid_id; +# endif +#elif defined(BOOST_HAS_MPTASKS) + threads::mac::detail::scoped_critical_region m_mutex; + threads::mac::detail::scoped_critical_region m_mutex_mutex; + std::size_t m_count; +#endif +}; + +class BOOST_THREAD_DECL recursive_timed_mutex + : private noncopyable +{ +public: + friend class detail::thread::lock_ops; + + typedef detail::thread::scoped_lock scoped_lock; + typedef detail::thread::scoped_try_lock< + recursive_timed_mutex> scoped_try_lock; + typedef detail::thread::scoped_timed_lock< + recursive_timed_mutex> scoped_timed_lock; + + recursive_timed_mutex(); + ~recursive_timed_mutex(); + +private: +#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS)) + typedef std::size_t cv_state; +#elif defined(BOOST_HAS_PTHREADS) + struct cv_state + { + long count; + pthread_mutex_t* pmutex; + }; +#endif + void do_lock(); + bool do_trylock(); + bool do_timedlock(const xtime& xt); + void do_unlock(); + void do_lock(cv_state& state); + void do_unlock(cv_state& state); + +#if defined(BOOST_HAS_WINTHREADS) + void* m_mutex; + unsigned long m_count; +#elif defined(BOOST_HAS_PTHREADS) + pthread_mutex_t m_mutex; + pthread_cond_t m_unlocked; + pthread_t m_thread_id; + bool m_valid_id; + unsigned m_count; +#elif defined(BOOST_HAS_MPTASKS) + threads::mac::detail::scoped_critical_region m_mutex; + threads::mac::detail::scoped_critical_region m_mutex_mutex; + std::size_t m_count; +#endif +}; +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif +} // namespace boost + +#endif // BOOST_RECURSIVE_MUTEX_WEK070601_HPP + +// Change Log: +// 8 Feb 01 WEKEMPF Initial version. +// 1 Jun 01 WEKEMPF Modified to use xtime for time outs. Factored out +// to three classes, mutex, try_mutex and timed_mutex. +// 11 Jun 01 WEKEMPF Modified to use PTHREAD_MUTEX_RECURSIVE if available. +// 3 Jan 03 WEKEMPF Modified for DLL implementation.