libzypp  13.10.6
MutexLock.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_THREAD_MUTEXLOCK_H
13 #define ZYPP_THREAD_MUTEXLOCK_H
14 
15 #include "zypp/thread/Mutex.h"
16 #include <cassert>
17 
18 
20 namespace zypp
21 {
22  namespace thread
24  {
25 
26 
27  // -------------------------------------------------------------
28  class MutexLock
29  {
30  public:
31  explicit MutexLock(Mutex &mutex, bool init_locked=true)
32  : m_mutex(&mutex)
33  , m_locked(false)
34  {
35  if(init_locked)
36  lock();
37  }
38 
39  MutexLock(const MutexLock &ref)
40  : m_mutex( ref.m_mutex)
41  , m_locked(ref.m_locked)
42  {
43  ref.m_locked = false;
44  }
45 
47  {
48  try
49  {
50  if( m_locked)
51  unlock();
52  }
53  catch( ... )
54  {
55  // don't let exceptions escape
56  }
57  }
58 
59  void lock()
60  {
61  assert(m_locked == false);
62  m_mutex->lock();
63  m_locked = true;
64  }
65 
66  void unlock()
67  {
68  assert(m_locked == true);
69  m_mutex->unlock();
70  m_locked = false;
71  }
72 
73  bool trylock()
74  {
75  assert(m_locked == false);
77  return m_locked;
78  }
79 
80  bool locked()
81  {
82  return m_locked;
83  }
84 
85  private:
87  mutable bool m_locked;
88  //friend class Condition;
89  };
90 
91 
93  } // namespace thread
96 } // namespace zypp
98 
99 #endif // ZYPP_THREAD_MUTEXLOCK_H
100 /*
101 ** vim: set ts=2 sts=2 sw=2 ai et:
102 */
MutexLock(const MutexLock &ref)
Definition: MutexLock.h:39
bool trylock()
Try to acquire ownership of this Mutex object.
Definition: Mutex.cc:92
MutexLock(Mutex &mutex, bool init_locked=true)
Definition: MutexLock.h:31
void lock()
Acquire ownership of this Mutex object.
Definition: Mutex.cc:72
A recursive Mutex.
Definition: Mutex.h:35
void unlock()
Release ownership of this Mutex object.
Definition: Mutex.cc:82