Merge branch 'develop'

This commit is contained in:
Peter Dimov
2014-06-11 22:30:00 +03:00
2 changed files with 26 additions and 1 deletions

View File

@ -11,12 +11,15 @@
// boost/detail/lwm_win32_cs.hpp
//
// Copyright (c) 2002, 2003 Peter Dimov
// Copyright (c) Microsoft Corporation 2014
//
// 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/predef.h>
#ifdef BOOST_USE_WINDOWS_H
# include <windows.h>
#endif
@ -43,7 +46,11 @@ struct critical_section
#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 *);
#endif
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);
@ -67,7 +74,11 @@ public:
lightweight_mutex()
{
#if BOOST_PLAT_WINDOWS_RUNTIME
InitializeCriticalSectionEx(&cs_, 4000, 0);
#else
InitializeCriticalSection(&cs_);
#endif
}
~lightweight_mutex()

View File

@ -11,6 +11,7 @@
// yield_k.hpp
//
// Copyright (c) 2008 Peter Dimov
// Copyright (c) Microsoft Corporation 2014
//
// void yield( unsigned k );
//
@ -24,6 +25,11 @@
//
#include <boost/config.hpp>
#include <boost/predef.h>
#if BOOST_PLAT_WINDOWS_RUNTIME
#include <thread>
#endif
// BOOST_SMT_PAUSE
@ -53,7 +59,7 @@ namespace boost
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 );
#endif
@ -68,6 +74,7 @@ inline void yield( unsigned k )
BOOST_SMT_PAUSE
}
#endif
#if !BOOST_PLAT_WINDOWS_RUNTIME
else if( k < 32 )
{
Sleep( 0 );
@ -76,6 +83,13 @@ inline void yield( unsigned k )
{
Sleep( 1 );
}
#else
else
{
// Sleep isn't supported on the Windows Runtime.
std::this_thread::yield();
}
#endif
}
} // namespace detail