mutex.hpp

来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 168 行

HPP
168
字号
// Copyright (C) 2001-2003// William E. Kempf//// Permission to use, copy, modify, distribute and sell this software// and its documentation for any purpose is hereby granted without fee,// provided that the above copyright notice appear in all copies and// that both that copyright notice and this permission notice appear// in supporting documentation.  William E. Kempf makes no representations// about the suitability of this software for any purpose.// It is provided "as is" without express or implied warranty.#ifndef BOOST_MUTEX_WEK070601_HPP#define BOOST_MUTEX_WEK070601_HPP#include <boost/thread/detail/config.hpp>#include <boost/utility.hpp>#include <boost/thread/detail/lock.hpp>#if defined(BOOST_HAS_PTHREADS)#   include <pthread.h>#endif#if defined(BOOST_HAS_MPTASKS)#   include "scoped_critical_region.hpp"#endifnamespace boost {struct xtime;class BOOST_THREAD_DECL mutex    : private noncopyable{public:    friend class detail::thread::lock_ops<mutex>;    typedef detail::thread::scoped_lock<mutex> scoped_lock;    mutex();    ~mutex();private:#if defined(BOOST_HAS_WINTHREADS)    typedef void* cv_state;#elif defined(BOOST_HAS_PTHREADS)    struct cv_state    {        pthread_mutex_t* pmutex;    };#elif defined(BOOST_HAS_MPTASKS)    struct cv_state    {    };#endif    void do_lock();    void do_unlock();    void do_lock(cv_state& state);    void do_unlock(cv_state& state);#if defined(BOOST_HAS_WINTHREADS)    void* m_mutex;    bool m_critical_section;#elif defined(BOOST_HAS_PTHREADS)    pthread_mutex_t m_mutex;#elif defined(BOOST_HAS_MPTASKS)    threads::mac::detail::scoped_critical_region m_mutex;    threads::mac::detail::scoped_critical_region m_mutex_mutex;#endif};class BOOST_THREAD_DECL try_mutex    : private noncopyable{public:    friend class detail::thread::lock_ops<try_mutex>;    typedef detail::thread::scoped_lock<try_mutex> scoped_lock;    typedef detail::thread::scoped_try_lock<try_mutex> scoped_try_lock;    try_mutex();    ~try_mutex();private:#if defined(BOOST_HAS_WINTHREADS)    typedef void* cv_state;#elif defined(BOOST_HAS_PTHREADS)    struct cv_state    {        pthread_mutex_t* pmutex;    };#elif defined(BOOST_HAS_MPTASKS)    struct cv_state    {    };#endif    void do_lock();    bool do_trylock();    void do_unlock();    void do_lock(cv_state& state);    void do_unlock(cv_state& state);#if defined(BOOST_HAS_WINTHREADS)    void* m_mutex;    bool m_critical_section;#elif defined(BOOST_HAS_PTHREADS)    pthread_mutex_t m_mutex;#elif defined(BOOST_HAS_MPTASKS)    threads::mac::detail::scoped_critical_region m_mutex;    threads::mac::detail::scoped_critical_region m_mutex_mutex;#endif};class BOOST_THREAD_DECL timed_mutex    : private noncopyable{public:    friend class detail::thread::lock_ops<timed_mutex>;    typedef detail::thread::scoped_lock<timed_mutex> scoped_lock;    typedef detail::thread::scoped_try_lock<timed_mutex> scoped_try_lock;    typedef detail::thread::scoped_timed_lock<timed_mutex> scoped_timed_lock;    timed_mutex();    ~timed_mutex();private:#if defined(BOOST_HAS_WINTHREADS)    typedef void* cv_state;#elif defined(BOOST_HAS_PTHREADS)    struct cv_state    {        pthread_mutex_t* pmutex;    };#elif defined(BOOST_HAS_MPTASKS)    struct cv_state    {    };#endif    void do_lock();    bool do_trylock();    bool do_timedlock(const xtime& xt);    void do_unlock();    void do_lock(cv_state& state);    void do_unlock(cv_state& state);#if defined(BOOST_HAS_WINTHREADS)    void* m_mutex;#elif defined(BOOST_HAS_PTHREADS)    pthread_mutex_t m_mutex;    pthread_cond_t m_condition;    bool m_locked;#elif defined(BOOST_HAS_MPTASKS)    threads::mac::detail::scoped_critical_region m_mutex;    threads::mac::detail::scoped_critical_region m_mutex_mutex;#endif};} // namespace boost// Change Log://    8 Feb 01  WEKEMPF Initial version.//   22 May 01  WEKEMPF Modified to use xtime for time outs.  Factored out//                      to three classes, mutex, try_mutex and timed_mutex.//    3 Jan 03  WEKEMPF Modified for DLL implementation.#endif // BOOST_MUTEX_WEK070601_HPP

⌨️ 快捷键说明

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