diff options
Diffstat (limited to 'src/third_party/boost-1.60.0/boost/thread/lock_guard.hpp')
-rw-r--r-- | src/third_party/boost-1.60.0/boost/thread/lock_guard.hpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/third_party/boost-1.60.0/boost/thread/lock_guard.hpp b/src/third_party/boost-1.60.0/boost/thread/lock_guard.hpp new file mode 100644 index 00000000000..4c2908af43f --- /dev/null +++ b/src/third_party/boost-1.60.0/boost/thread/lock_guard.hpp @@ -0,0 +1,88 @@ +// 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) +// (C) Copyright 2007 Anthony Williams +// (C) Copyright 2011-2012 Vicente J. Botet Escriba + +#ifndef BOOST_THREAD_LOCK_GUARD_HPP +#define BOOST_THREAD_LOCK_GUARD_HPP + +#include <boost/thread/detail/config.hpp> +#include <boost/thread/detail/delete.hpp> +#include <boost/thread/detail/move.hpp> +#include <boost/thread/detail/lockable_wrapper.hpp> +#include <boost/thread/lock_options.hpp> +#if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS +#include <boost/thread/is_locked_by_this_thread.hpp> +#include <boost/assert.hpp> +#endif + +#include <boost/config/abi_prefix.hpp> + +namespace boost +{ + + template <typename Mutex> + class lock_guard + { + private: + Mutex& m; + + public: + typedef Mutex mutex_type; + BOOST_THREAD_NO_COPYABLE( lock_guard ) + + explicit lock_guard(Mutex& m_) : + m(m_) + { + m.lock(); + } + + lock_guard(Mutex& m_, adopt_lock_t) : + m(m_) + { +#if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS + BOOST_ASSERT(is_locked_by_this_thread(m)); +#endif + } + +#if ! defined BOOST_THREAD_NO_CXX11_HDR_INITIALIZER_LIST + lock_guard(std::initializer_list<thread_detail::lockable_wrapper<Mutex> > l_) : + m(*(const_cast<thread_detail::lockable_wrapper<Mutex>*>(l_.begin())->m)) + { + m.lock(); + } + + lock_guard(std::initializer_list<thread_detail::lockable_adopt_wrapper<Mutex> > l_) : + m(*(const_cast<thread_detail::lockable_adopt_wrapper<Mutex>*>(l_.begin())->m)) + { +#if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS + BOOST_ASSERT(is_locked_by_this_thread(m)); +#endif + } + +#endif + ~lock_guard() + { + m.unlock(); + } + }; + + +#if ! defined BOOST_THREAD_NO_MAKE_LOCK_GUARD + template <typename Lockable> + lock_guard<Lockable> make_lock_guard(Lockable& mtx) + { + return { thread_detail::lockable_wrapper<Lockable>(mtx) }; + } + template <typename Lockable> + lock_guard<Lockable> make_lock_guard(Lockable& mtx, adopt_lock_t) + { + return { thread_detail::lockable_adopt_wrapper<Lockable>(mtx) }; + } +#endif +} + +#include <boost/config/abi_suffix.hpp> + +#endif |