lwm_win32.hpp
来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 123 行
HPP
123 行
#ifndef BOOST_DETAIL_LWM_WIN32_HPP_INCLUDED#define BOOST_DETAIL_LWM_WIN32_HPP_INCLUDED// MS compatible compilers support #pragma once#if defined(_MSC_VER) && (_MSC_VER >= 1020)# pragma once#endif//// boost/detail/lwm_win32.hpp//// Copyright (c) 2002, 2003 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)//#ifdef BOOST_USE_WINDOWS_H# include <windows.h>#endif#ifdef __BORLANDC__# pragma warn -8027 // Functions containing while are not expanded inline#endifnamespace boost{namespace detail{#ifndef BOOST_USE_WINDOWS_H#ifdef _WIN64// Intel 6.0 on Win64 version, posted by Tim Fenders to [boost-users]extern "C" long_type __cdecl _InterlockedExchange(long volatile *, long);#pragma intrinsic(_InterlockedExchange)inline long InterlockedExchange(long volatile* lp, long l){ return _InterlockedExchange(lp, l);}#else // _WIN64extern "C" __declspec(dllimport) long __stdcall InterlockedExchange(long volatile *, long);#endif // _WIN64extern "C" __declspec(dllimport) void __stdcall Sleep(unsigned long);#endif // #ifndef BOOST_USE_WINDOWS_Hclass lightweight_mutex{private: long l_; lightweight_mutex(lightweight_mutex const &); lightweight_mutex & operator=(lightweight_mutex const &);public: lightweight_mutex(): l_(0) { } class scoped_lock; friend class scoped_lock; class scoped_lock { private: lightweight_mutex & m_; scoped_lock(scoped_lock const &); scoped_lock & operator=(scoped_lock const &); public: explicit scoped_lock(lightweight_mutex & m): m_(m) { while( InterlockedExchange(&m_.l_, 1) ) { // Note: changed to Sleep(1) from Sleep(0). // According to MSDN, Sleep(0) will never yield // to a lower-priority thread, whereas Sleep(1) // will. Performance seems not to be affected. Sleep(1); } } ~scoped_lock() { InterlockedExchange(&m_.l_, 0); // Note: adding a yield here will make // the spinlock more fair and will increase the overall // performance of some applications substantially in // high contention situations, but will penalize the // low contention / single thread case up to 5x } };};} // namespace detail} // namespace boost#ifdef __BORLANDC__# pragma warn .8027 // Functions containing while are not expanded inline#endif#endif // #ifndef BOOST_DETAIL_LWM_WIN32_HPP_INCLUDED
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?