diff --git a/include/boost/smart_ptr/detail/sp_thread_pause.hpp b/include/boost/smart_ptr/detail/sp_thread_pause.hpp index 2cddd90..2bb7d39 100644 --- a/include/boost/smart_ptr/detail/sp_thread_pause.hpp +++ b/include/boost/smart_ptr/detail/sp_thread_pause.hpp @@ -1,51 +1,20 @@ #ifndef BOOST_SMART_PTR_DETAIL_SP_THREAD_PAUSE_HPP_INCLUDED #define BOOST_SMART_PTR_DETAIL_SP_THREAD_PAUSE_HPP_INCLUDED -// MS compatible compilers support #pragma once - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -// boost/smart_ptr/detail/sp_thread_pause.hpp -// -// inline void bost::detail::sp_thread_pause(); -// -// Emits a "pause" instruction. -// -// Copyright 2008, 2020 Peter Dimov -// Distributed under the Boost Software License, Version 1.0 +// Copyright 2023 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt -#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) ) && !defined(__c2__) - -extern "C" void _mm_pause(); - -#define BOOST_SP_PAUSE _mm_pause(); - -#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) ) - -#define BOOST_SP_PAUSE __asm__ __volatile__( "rep; nop" : : : "memory" ); - -#else - -#define BOOST_SP_PAUSE - -#endif +#include namespace boost { namespace detail { -inline void sp_thread_pause() -{ - BOOST_SP_PAUSE -} +using boost::core::sp_thread_pause; } // namespace detail } // namespace boost -#undef BOOST_SP_PAUSE - #endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_THREAD_PAUSE_HPP_INCLUDED diff --git a/include/boost/smart_ptr/detail/sp_thread_sleep.hpp b/include/boost/smart_ptr/detail/sp_thread_sleep.hpp index ff1d168..95cee95 100644 --- a/include/boost/smart_ptr/detail/sp_thread_sleep.hpp +++ b/include/boost/smart_ptr/detail/sp_thread_sleep.hpp @@ -1,104 +1,20 @@ #ifndef BOOST_SMART_PTR_DETAIL_SP_THREAD_SLEEP_HPP_INCLUDED #define BOOST_SMART_PTR_DETAIL_SP_THREAD_SLEEP_HPP_INCLUDED -// MS compatible compilers support #pragma once - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -// boost/smart_ptr/detail/sp_thread_sleep.hpp -// -// inline void bost::detail::sp_thread_sleep(); -// -// Cease execution for a while to yield to other threads, -// as if by calling nanosleep() with an appropriate interval. -// -// Copyright 2008, 2020 Peter Dimov -// Distributed under the Boost Software License, Version 1.0 +// Copyright 2023 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt -#include -#include - -#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ ) - -#if defined(BOOST_SP_REPORT_IMPLEMENTATION) - BOOST_PRAGMA_MESSAGE("Using Sleep(1) in sp_thread_sleep") -#endif - -#include +#include namespace boost { - namespace detail { -inline void sp_thread_sleep() -{ - Sleep( 1 ); -} +using boost::core::sp_thread_sleep; } // namespace detail - } // namespace boost -#elif defined(BOOST_HAS_NANOSLEEP) - -#if defined(BOOST_SP_REPORT_IMPLEMENTATION) - BOOST_PRAGMA_MESSAGE("Using nanosleep() in sp_thread_sleep") -#endif - -#include - -namespace boost -{ - -namespace detail -{ - -inline void sp_thread_sleep() -{ - // g++ -Wextra warns on {} or {0} - struct timespec rqtp = { 0, 0 }; - - // POSIX says that timespec has tv_sec and tv_nsec - // But it doesn't guarantee order or placement - - rqtp.tv_sec = 0; - rqtp.tv_nsec = 1000; - - nanosleep( &rqtp, 0 ); -} - -} // namespace detail - -} // namespace boost - -#else - -#if defined(BOOST_SP_REPORT_IMPLEMENTATION) - BOOST_PRAGMA_MESSAGE("Using sp_thread_yield() in sp_thread_sleep") -#endif - -#include - -namespace boost -{ - -namespace detail -{ - -inline void sp_thread_sleep() -{ - sp_thread_yield(); -} - -} // namespace detail - -} // namespace boost - -#endif - #endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_THREAD_SLEEP_HPP_INCLUDED diff --git a/include/boost/smart_ptr/detail/sp_thread_yield.hpp b/include/boost/smart_ptr/detail/sp_thread_yield.hpp index 9a221cc..4b79521 100644 --- a/include/boost/smart_ptr/detail/sp_thread_yield.hpp +++ b/include/boost/smart_ptr/detail/sp_thread_yield.hpp @@ -1,100 +1,20 @@ #ifndef BOOST_SMART_PTR_DETAIL_SP_THREAD_YIELD_HPP_INCLUDED #define BOOST_SMART_PTR_DETAIL_SP_THREAD_YIELD_HPP_INCLUDED -// MS compatible compilers support #pragma once - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -// boost/smart_ptr/detail/sp_thread_yield.hpp -// -// inline void bost::detail::sp_thread_yield(); -// -// Gives up the remainder of the time slice, -// as if by calling sched_yield(). -// -// Copyright 2008, 2020 Peter Dimov -// Distributed under the Boost Software License, Version 1.0 +// Copyright 2023 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt -#include -#include - -#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ ) - -#if defined(BOOST_SP_REPORT_IMPLEMENTATION) - BOOST_PRAGMA_MESSAGE("Using Sleep(0) in sp_thread_yield") -#endif - -#include +#include namespace boost { - namespace detail { -inline void sp_thread_yield() -{ - Sleep( 0 ); -} +using boost::core::sp_thread_yield; } // namespace detail - } // namespace boost -#elif defined(BOOST_HAS_SCHED_YIELD) - -#if defined(BOOST_SP_REPORT_IMPLEMENTATION) - BOOST_PRAGMA_MESSAGE("Using sched_yield() in sp_thread_yield") -#endif - -#ifndef _AIX -# include -#else - // AIX's sched.h defines ::var which sometimes conflicts with Lambda's var - extern "C" int sched_yield(void); -#endif - -namespace boost -{ - -namespace detail -{ - -inline void sp_thread_yield() -{ - sched_yield(); -} - -} // namespace detail - -} // namespace boost - -#else - -#if defined(BOOST_SP_REPORT_IMPLEMENTATION) - BOOST_PRAGMA_MESSAGE("Using sp_thread_pause() in sp_thread_yield") -#endif - -#include - -namespace boost -{ - -namespace detail -{ - -inline void sp_thread_yield() -{ - sp_thread_pause(); -} - -} // namespace detail - -} // namespace boost - -#endif - #endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_THREAD_YIELD_HPP_INCLUDED diff --git a/include/boost/smart_ptr/detail/sp_win32_sleep.hpp b/include/boost/smart_ptr/detail/sp_win32_sleep.hpp deleted file mode 100644 index 139a569..0000000 --- a/include/boost/smart_ptr/detail/sp_win32_sleep.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef BOOST_SMART_PTR_DETAIL_SP_WIN32_SLEEP_HPP_INCLUDED -#define BOOST_SMART_PTR_DETAIL_SP_WIN32_SLEEP_HPP_INCLUDED - -// MS compatible compilers support #pragma once - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -// boost/smart_ptr/detail/sp_win32_sleep.hpp -// -// Declares the Win32 Sleep() function. -// -// Copyright 2008, 2020 Peter Dimov -// Distributed under the Boost Software License, Version 1.0 -// https://www.boost.org/LICENSE_1_0.txt - -#if defined( BOOST_USE_WINDOWS_H ) -# include -#endif - -namespace boost -{ -namespace detail -{ - -#if !defined( BOOST_USE_WINDOWS_H ) - -#if defined(__clang__) && defined(__x86_64__) -// clang x64 warns that __stdcall is ignored -# define BOOST_SP_STDCALL -#else -# define BOOST_SP_STDCALL __stdcall -#endif - -#if defined(__LP64__) // Cygwin 64 - extern "C" __declspec(dllimport) void BOOST_SP_STDCALL Sleep( unsigned int ms ); -#else - extern "C" __declspec(dllimport) void BOOST_SP_STDCALL Sleep( unsigned long ms ); -#endif - -#undef BOOST_SP_STDCALL - -#endif // !defined( BOOST_USE_WINDOWS_H ) - -} // namespace detail -} // namespace boost - -#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_WIN32_SLEEP_HPP_INCLUDED