]> git.lyx.org Git - lyx.git/blob - boost/boost/detail/lwm_pthreads.hpp
complie fix
[lyx.git] / boost / boost / detail / lwm_pthreads.hpp
1 #ifndef BOOST_DETAIL_LWM_PTHREADS_HPP_INCLUDED
2 #define BOOST_DETAIL_LWM_PTHREADS_HPP_INCLUDED
3
4 #if _MSC_VER >= 1020
5 #pragma once
6 #endif
7
8 //
9 //  boost/detail/lwm_pthreads.hpp
10 //
11 //  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
12 //
13 //  Permission to copy, use, modify, sell and distribute this software
14 //  is granted provided this copyright notice appears in all copies.
15 //  This software is provided "as is" without express or implied
16 //  warranty, and with no claim as to its suitability for any purpose.
17 //
18
19 #include <pthread.h>
20
21 namespace boost
22 {
23
24 namespace detail
25 {
26
27 class lightweight_mutex
28 {
29 private:
30
31     pthread_mutex_t m_;
32
33     lightweight_mutex(lightweight_mutex const &);
34     lightweight_mutex & operator=(lightweight_mutex const &);
35
36 public:
37
38     lightweight_mutex()
39     {
40
41 // HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
42
43 #if defined(__hpux) && defined(_DECTHREADS_)
44         pthread_mutex_init(&m_, pthread_mutexattr_default);
45 #else
46         pthread_mutex_init(&m_, 0);
47 #endif
48     }
49
50     ~lightweight_mutex()
51     {
52         pthread_mutex_destroy(&m_);
53     }
54
55     class scoped_lock;
56     friend class scoped_lock;
57
58     class scoped_lock
59     {
60     private:
61
62         pthread_mutex_t & m_;
63
64         scoped_lock(scoped_lock const &);
65         scoped_lock & operator=(scoped_lock const &);
66
67     public:
68
69         scoped_lock(lightweight_mutex & m): m_(m.m_)
70         {
71             pthread_mutex_lock(&m_);
72         }
73
74         ~scoped_lock()
75         {
76             pthread_mutex_unlock(&m_);
77         }
78     };
79 };
80
81 } // namespace detail
82
83 } // namespace boost
84
85 #endif // #ifndef BOOST_DETAIL_LWM_PTHREADS_HPP_INCLUDED