forked from boostorg/smart_ptr
Merge branch 'develop'
This commit is contained in:
@ -11,12 +11,15 @@
|
|||||||
// boost/detail/lwm_win32_cs.hpp
|
// boost/detail/lwm_win32_cs.hpp
|
||||||
//
|
//
|
||||||
// Copyright (c) 2002, 2003 Peter Dimov
|
// Copyright (c) 2002, 2003 Peter Dimov
|
||||||
|
// Copyright (c) Microsoft Corporation 2014
|
||||||
//
|
//
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
// Distributed under the Boost Software License, Version 1.0. (See
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
// accompanying file LICENSE_1_0.txt or copy at
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <boost/predef.h>
|
||||||
|
|
||||||
#ifdef BOOST_USE_WINDOWS_H
|
#ifdef BOOST_USE_WINDOWS_H
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
@ -43,7 +46,11 @@ struct critical_section
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if BOOST_PLAT_WINDOWS_RUNTIME
|
||||||
|
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long);
|
||||||
|
#else
|
||||||
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);
|
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);
|
||||||
|
#endif
|
||||||
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
|
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
|
||||||
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
|
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
|
||||||
extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);
|
extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);
|
||||||
@ -67,7 +74,11 @@ public:
|
|||||||
|
|
||||||
lightweight_mutex()
|
lightweight_mutex()
|
||||||
{
|
{
|
||||||
|
#if BOOST_PLAT_WINDOWS_RUNTIME
|
||||||
|
InitializeCriticalSectionEx(&cs_, 4000, 0);
|
||||||
|
#else
|
||||||
InitializeCriticalSection(&cs_);
|
InitializeCriticalSection(&cs_);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
~lightweight_mutex()
|
~lightweight_mutex()
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
// yield_k.hpp
|
// yield_k.hpp
|
||||||
//
|
//
|
||||||
// Copyright (c) 2008 Peter Dimov
|
// Copyright (c) 2008 Peter Dimov
|
||||||
|
// Copyright (c) Microsoft Corporation 2014
|
||||||
//
|
//
|
||||||
// void yield( unsigned k );
|
// void yield( unsigned k );
|
||||||
//
|
//
|
||||||
@ -24,6 +25,11 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
|
#include <boost/predef.h>
|
||||||
|
|
||||||
|
#if BOOST_PLAT_WINDOWS_RUNTIME
|
||||||
|
#include <thread>
|
||||||
|
#endif
|
||||||
|
|
||||||
// BOOST_SMT_PAUSE
|
// BOOST_SMT_PAUSE
|
||||||
|
|
||||||
@ -53,7 +59,7 @@ namespace boost
|
|||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
|
||||||
#if !defined( BOOST_USE_WINDOWS_H )
|
#if !defined( BOOST_USE_WINDOWS_H ) && !BOOST_PLAT_WINDOWS_RUNTIME
|
||||||
extern "C" void __stdcall Sleep( unsigned long ms );
|
extern "C" void __stdcall Sleep( unsigned long ms );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -68,6 +74,7 @@ inline void yield( unsigned k )
|
|||||||
BOOST_SMT_PAUSE
|
BOOST_SMT_PAUSE
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if !BOOST_PLAT_WINDOWS_RUNTIME
|
||||||
else if( k < 32 )
|
else if( k < 32 )
|
||||||
{
|
{
|
||||||
Sleep( 0 );
|
Sleep( 0 );
|
||||||
@ -76,6 +83,13 @@ inline void yield( unsigned k )
|
|||||||
{
|
{
|
||||||
Sleep( 1 );
|
Sleep( 1 );
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Sleep isn't supported on the Windows Runtime.
|
||||||
|
std::this_thread::yield();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
Reference in New Issue
Block a user