From fae4d58de691583116ee401532a9bd1ee8bb5f03 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Mon, 27 Nov 2017 11:19:33 -0600 Subject: [PATCH] Add spinlock_pt.hpp for older VxWorks versions --- vxWorks/Makefile | 1 + .../boost/smart_ptr/detail/spinlock_pt.hpp | 79 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 vxWorks/boost/smart_ptr/detail/spinlock_pt.hpp diff --git a/vxWorks/Makefile b/vxWorks/Makefile index d3b122bc4..e2c0b5d2d 100644 --- a/vxWorks/Makefile +++ b/vxWorks/Makefile @@ -44,6 +44,7 @@ INC_vxWorks += boost/smart_ptr/detail/sp_counted_impl.hpp INC_vxWorks += boost/smart_ptr/detail/sp_has_sync.hpp INC_vxWorks += boost/smart_ptr/detail/spinlock.hpp INC_vxWorks += boost/smart_ptr/detail/spinlock_pool.hpp +INC_vxWorks += boost/smart_ptr/detail/spinlock_pt.hpp INC_vxWorks += boost/smart_ptr/detail/spinlock_sync.hpp INC_vxWorks += boost/smart_ptr/detail/sp_nullptr_t.hpp INC_vxWorks += boost/smart_ptr/detail/yield_k.hpp diff --git a/vxWorks/boost/smart_ptr/detail/spinlock_pt.hpp b/vxWorks/boost/smart_ptr/detail/spinlock_pt.hpp new file mode 100644 index 000000000..f9cabfc3a --- /dev/null +++ b/vxWorks/boost/smart_ptr/detail/spinlock_pt.hpp @@ -0,0 +1,79 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 Peter Dimov +// +// 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) +// + +#include + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + pthread_mutex_t v_; + +public: + + bool try_lock() + { + return pthread_mutex_trylock( &v_ ) == 0; + } + + void lock() + { + pthread_mutex_lock( &v_ ); + } + + void unlock() + { + pthread_mutex_unlock( &v_ ); + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT { PTHREAD_MUTEX_INITIALIZER } + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED