/extlibs/Boost/include/boost/smart_ptr/detail/lwm_pthreads.hpp
C++ Header | 87 lines | 52 code | 24 blank | 11 comment | 7 complexity | 25e557217a95adf122a2c46c93d730bd MD5 | raw file
1#ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED 2#define BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED 3 4// MS compatible compilers support #pragma once 5 6#if defined(_MSC_VER) && (_MSC_VER >= 1020) 7# pragma once 8#endif 9 10// 11// boost/detail/lwm_pthreads.hpp 12// 13// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. 14// 15// Distributed under the Boost Software License, Version 1.0. (See 16// accompanying file LICENSE_1_0.txt or copy at 17// http://www.boost.org/LICENSE_1_0.txt) 18// 19 20#include <boost/assert.hpp> 21#include <pthread.h> 22 23namespace boost 24{ 25 26namespace detail 27{ 28 29class lightweight_mutex 30{ 31private: 32 33 pthread_mutex_t m_; 34 35 lightweight_mutex(lightweight_mutex const &); 36 lightweight_mutex & operator=(lightweight_mutex const &); 37 38public: 39 40 lightweight_mutex() 41 { 42 43// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init 44 45#if defined(__hpux) && defined(_DECTHREADS_) 46 BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 ); 47#else 48 BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 ); 49#endif 50 } 51 52 ~lightweight_mutex() 53 { 54 BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 ); 55 } 56 57 class scoped_lock; 58 friend class scoped_lock; 59 60 class scoped_lock 61 { 62 private: 63 64 pthread_mutex_t & m_; 65 66 scoped_lock(scoped_lock const &); 67 scoped_lock & operator=(scoped_lock const &); 68 69 public: 70 71 scoped_lock(lightweight_mutex & m): m_(m.m_) 72 { 73 BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 ); 74 } 75 76 ~scoped_lock() 77 { 78 BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 ); 79 } 80 }; 81}; 82 83} // namespace detail 84 85} // namespace boost 86 87#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED