PageRenderTime 19ms CodeModel.GetById 16ms app.highlight 2ms RepoModel.GetById 0ms app.codeStats 0ms

/extlibs/Boost/include/boost/smart_ptr/detail/lwm_pthreads.hpp

https://bitbucket.org/hugoruscitti/pilascpp
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