]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/include/boost/smart_ptr/detail/spinlock_pt.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / smart_ptr / include / boost / smart_ptr / detail / spinlock_pt.hpp
1 #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED
2 #define BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_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 // Copyright (c) 2008 Peter Dimov
12 //
13 // Distributed under the Boost Software License, Version 1.0.
14 // See accompanying file LICENSE_1_0.txt or copy at
15 // http://www.boost.org/LICENSE_1_0.txt)
16 //
17
18 #include <pthread.h>
19
20 namespace boost
21 {
22
23 namespace detail
24 {
25
26 class spinlock
27 {
28 public:
29
30 pthread_mutex_t v_;
31
32 public:
33
34 bool try_lock()
35 {
36 return pthread_mutex_trylock( &v_ ) == 0;
37 }
38
39 void lock()
40 {
41 pthread_mutex_lock( &v_ );
42 }
43
44 void unlock()
45 {
46 pthread_mutex_unlock( &v_ );
47 }
48
49 public:
50
51 class scoped_lock
52 {
53 private:
54
55 spinlock & sp_;
56
57 scoped_lock( scoped_lock const & );
58 scoped_lock & operator=( scoped_lock const & );
59
60 public:
61
62 explicit scoped_lock( spinlock & sp ): sp_( sp )
63 {
64 sp.lock();
65 }
66
67 ~scoped_lock()
68 {
69 sp_.unlock();
70 }
71 };
72 };
73
74 } // namespace detail
75 } // namespace boost
76
77 #define BOOST_DETAIL_SPINLOCK_INIT { PTHREAD_MUTEX_INITIALIZER }
78
79 #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED