]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/include/boost/smart_ptr/detail/lwm_pthreads.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / smart_ptr / include / boost / smart_ptr / detail / lwm_pthreads.hpp
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
23 namespace boost
24 {
25
26 namespace detail
27 {
28
29 class lightweight_mutex
30 {
31 private:
32
33 pthread_mutex_t m_;
34
35 lightweight_mutex(lightweight_mutex const &);
36 lightweight_mutex & operator=(lightweight_mutex const &);
37
38 public:
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