mirror of
https://github.com/boostorg/smart_ptr.git
synced 2025-11-15 23:09:41 +01:00
Remove unused spinlock implementations again
This commit is contained in:
@@ -1,128 +0,0 @@
|
|||||||
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
|
|
||||||
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copyright (c) 2008, 2011 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 <boost/smart_ptr/detail/yield_k.hpp>
|
|
||||||
|
|
||||||
#if defined(BOOST_SP_REPORT_IMPLEMENTATION)
|
|
||||||
|
|
||||||
#include <boost/config/pragma_message.hpp>
|
|
||||||
BOOST_PRAGMA_MESSAGE("Using g++/ARM spinlock")
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__)
|
|
||||||
|
|
||||||
# define BOOST_SP_ARM_BARRIER "dmb"
|
|
||||||
# define BOOST_SP_ARM_HAS_LDREX
|
|
||||||
|
|
||||||
#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)
|
|
||||||
|
|
||||||
# define BOOST_SP_ARM_BARRIER "mcr p15, 0, r0, c7, c10, 5"
|
|
||||||
# define BOOST_SP_ARM_HAS_LDREX
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
# define BOOST_SP_ARM_BARRIER ""
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
|
|
||||||
class spinlock
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
int v_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
bool try_lock()
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
#ifdef BOOST_SP_ARM_HAS_LDREX
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"ldrex %0, [%2]; \n"
|
|
||||||
"cmp %0, %1; \n"
|
|
||||||
"strexne %0, %1, [%2]; \n"
|
|
||||||
BOOST_SP_ARM_BARRIER :
|
|
||||||
"=&r"( r ): // outputs
|
|
||||||
"r"( 1 ), "r"( &v_ ): // inputs
|
|
||||||
"memory", "cc" );
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
__asm__ __volatile__(
|
|
||||||
"swp %0, %1, [%2];\n"
|
|
||||||
BOOST_SP_ARM_BARRIER :
|
|
||||||
"=&r"( r ): // outputs
|
|
||||||
"r"( 1 ), "r"( &v_ ): // inputs
|
|
||||||
"memory", "cc" );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return r == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void lock()
|
|
||||||
{
|
|
||||||
for( unsigned k = 0; !try_lock(); ++k )
|
|
||||||
{
|
|
||||||
boost::detail::yield( k );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void unlock()
|
|
||||||
{
|
|
||||||
__asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: "memory" );
|
|
||||||
*const_cast< int volatile* >( &v_ ) = 0;
|
|
||||||
__asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: "memory" );
|
|
||||||
}
|
|
||||||
|
|
||||||
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 {0}
|
|
||||||
|
|
||||||
#undef BOOST_SP_ARM_BARRIER
|
|
||||||
#undef BOOST_SP_ARM_HAS_LDREX
|
|
||||||
|
|
||||||
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED
|
|
||||||
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_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 <boost/assert.hpp>
|
|
||||||
|
|
||||||
#if defined(BOOST_SP_REPORT_IMPLEMENTATION)
|
|
||||||
|
|
||||||
#include <boost/config/pragma_message.hpp>
|
|
||||||
BOOST_PRAGMA_MESSAGE("Using single-threaded spinlock emulation")
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
|
|
||||||
class spinlock
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
bool locked_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
inline bool try_lock()
|
|
||||||
{
|
|
||||||
if( locked_ )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
locked_ = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void lock()
|
|
||||||
{
|
|
||||||
BOOST_ASSERT( !locked_ );
|
|
||||||
locked_ = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void unlock()
|
|
||||||
{
|
|
||||||
BOOST_ASSERT( locked_ );
|
|
||||||
locked_ = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 { false }
|
|
||||||
|
|
||||||
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
#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 <pthread.h>
|
|
||||||
|
|
||||||
#if defined(BOOST_SP_REPORT_IMPLEMENTATION)
|
|
||||||
|
|
||||||
#include <boost/config/pragma_message.hpp>
|
|
||||||
BOOST_PRAGMA_MESSAGE("Using pthread_mutex spinlock emulation")
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
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
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED
|
|
||||||
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_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 <boost/smart_ptr/detail/yield_k.hpp>
|
|
||||||
|
|
||||||
#if defined( __ia64__ ) && defined( __INTEL_COMPILER )
|
|
||||||
# include <ia64intrin.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(BOOST_SP_REPORT_IMPLEMENTATION)
|
|
||||||
|
|
||||||
#include <boost/config/pragma_message.hpp>
|
|
||||||
BOOST_PRAGMA_MESSAGE("Using __sync spinlock")
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
|
|
||||||
class spinlock
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
unsigned char v_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
bool try_lock()
|
|
||||||
{
|
|
||||||
int r = __sync_lock_test_and_set( &v_, 1 );
|
|
||||||
return r == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void lock()
|
|
||||||
{
|
|
||||||
for( unsigned k = 0; !try_lock(); ++k )
|
|
||||||
{
|
|
||||||
boost::detail::yield( k );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void unlock()
|
|
||||||
{
|
|
||||||
__sync_lock_release( &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 {0}
|
|
||||||
|
|
||||||
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED
|
|
||||||
#define BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_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 <boost/smart_ptr/detail/sp_interlocked.hpp>
|
|
||||||
#include <boost/smart_ptr/detail/yield_k.hpp>
|
|
||||||
|
|
||||||
#if defined(BOOST_SP_REPORT_IMPLEMENTATION)
|
|
||||||
|
|
||||||
#include <boost/config/pragma_message.hpp>
|
|
||||||
BOOST_PRAGMA_MESSAGE("Using Win32 spinlock")
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// BOOST_COMPILER_FENCE
|
|
||||||
|
|
||||||
#if defined(__INTEL_COMPILER)
|
|
||||||
|
|
||||||
#define BOOST_COMPILER_FENCE __memory_barrier();
|
|
||||||
|
|
||||||
#elif defined( _MSC_VER ) && _MSC_VER >= 1310
|
|
||||||
|
|
||||||
extern "C" void _ReadWriteBarrier();
|
|
||||||
#pragma intrinsic( _ReadWriteBarrier )
|
|
||||||
|
|
||||||
#define BOOST_COMPILER_FENCE _ReadWriteBarrier();
|
|
||||||
|
|
||||||
#elif defined(__GNUC__)
|
|
||||||
|
|
||||||
#define BOOST_COMPILER_FENCE __asm__ __volatile__( "" : : : "memory" );
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define BOOST_COMPILER_FENCE
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
|
|
||||||
class spinlock
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
long v_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
bool try_lock()
|
|
||||||
{
|
|
||||||
long r = BOOST_SP_INTERLOCKED_EXCHANGE( &v_, 1 );
|
|
||||||
|
|
||||||
BOOST_COMPILER_FENCE
|
|
||||||
|
|
||||||
return r == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void lock()
|
|
||||||
{
|
|
||||||
for( unsigned k = 0; !try_lock(); ++k )
|
|
||||||
{
|
|
||||||
boost::detail::yield( k );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void unlock()
|
|
||||||
{
|
|
||||||
BOOST_COMPILER_FENCE
|
|
||||||
*const_cast< long volatile* >( &v_ ) = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 {0}
|
|
||||||
|
|
||||||
#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED
|
|
||||||
Reference in New Issue
Block a user