mutex.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 148 行

HPP
148
字号
// Copyright (C) 2000 Stephen Cleary//// 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)//// See http://www.boost.org for updates, documentation, and revision history.#ifndef BOOST_POOL_MUTEX_HPP#define BOOST_POOL_MUTEX_HPP#include <boost/config.hpp>  // for workarounds// Extremely Light-Weight wrapper classes for OS thread synchronization// Configuration: for now, we just choose between pthread or Win32 mutexes or none#define BOOST_MUTEX_HELPER_NONE         0#define BOOST_MUTEX_HELPER_WIN32        1#define BOOST_MUTEX_HELPER_PTHREAD      2#if !defined(BOOST_HAS_THREADS) && !defined(BOOST_NO_MT)# define BOOST_NO_MT#endif#ifdef BOOST_NO_MT  // No multithreading -> make locks into no-ops  #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_NONE#else  #ifdef BOOST_WINDOWS    #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_WIN32  #else    #if defined(BOOST_HAS_UNISTD_H)      #include <unistd.h>    #endif    #if defined(_POSIX_THREADS) || defined(BOOST_HAS_PTHREADS)      #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_PTHREAD    #endif  #endif#endif#ifndef BOOST_MUTEX_HELPER  #error Unable to determine platform mutex type; define BOOST_NO_MT to assume single-threaded#endif#ifndef BOOST_NO_MT# ifdef BOOST_WINDOWS#  include <windows.h># endif# if defined(_POSIX_THREADS) || defined(BOOST_HAS_PTHREADS)#  include <pthread.h># endif#endifnamespace boost {namespace details {namespace pool {#ifndef BOOST_NO_MT#ifdef BOOST_WINDOWSclass win32_mutex{  private:    ::CRITICAL_SECTION mtx;    win32_mutex(const win32_mutex &);    void operator=(const win32_mutex &);  public:    win32_mutex()    { ::InitializeCriticalSection(&mtx); }    ~win32_mutex()    { ::DeleteCriticalSection(&mtx); }    void lock()    { ::EnterCriticalSection(&mtx); }    void unlock()    { ::LeaveCriticalSection(&mtx); }};#endif // defined(BOOST_WINDOWS)#if defined(_POSIX_THREADS) || defined(BOOST_HAS_PTHREADS)class pthread_mutex{  private:    ::pthread_mutex_t mtx;    pthread_mutex(const pthread_mutex &);    void operator=(const pthread_mutex &);  public:    pthread_mutex()    { ::pthread_mutex_init(&mtx, 0); }    ~pthread_mutex()    { ::pthread_mutex_destroy(&mtx); }    void lock()    { ::pthread_mutex_lock(&mtx); }    void unlock()    { ::pthread_mutex_unlock(&mtx); }};#endif // defined(_POSIX_THREADS) || defined(BOOST_HAS_PTHREADS)#endif // !defined(BOOST_NO_MT)class null_mutex{  private:    null_mutex(const null_mutex &);    void operator=(const null_mutex &);  public:    null_mutex() { }    static void lock() { }    static void unlock() { }};#if BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_NONE  typedef null_mutex default_mutex;#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_WIN32  typedef win32_mutex default_mutex;#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_PTHREAD  typedef pthread_mutex default_mutex;#endif} // namespace pool} // namespace details} // namespace boost#undef BOOST_MUTEX_HELPER_WIN32#undef BOOST_MUTEX_HELPER_PTHREAD#undef BOOST_MUTEX_HELPER_NONE#undef BOOST_MUTEX_HELPER#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?