]> git.donarmstrong.com Git - rsem.git/blob - boost/smart_ptr/detail/lwm_pthreads.hpp
RSEM Source Codes
[rsem.git] / 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