This is Unofficial EPICS BASE Doxygen Site
spinlock_pt.hpp
Go to the documentation of this file.
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 
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 
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
Definition: assert.hpp:91
pthread_mutex_t v_
Definition: spinlock_pt.hpp:30