openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
elock.h
Go to the documentation of this file.
1 #ifndef __elock_h
2 #define __elock_h
3 
4 #include <pthread.h>
5 
6 class singleLock
7 {
8  pthread_mutex_t &lock;
9 public:
10  singleLock(pthread_mutex_t &m )
11  :lock(m)
12  {
13  pthread_mutex_lock(&lock); // NOSONAR
14  }
16  {
17  pthread_mutex_unlock(&lock);
18  }
19 };
20 
21 class eRdWrLock
22 {
23  friend class eRdLocker;
24  friend class eWrLocker;
25  pthread_rwlock_t m_lock;
27 public:
29  {
30  pthread_rwlock_init(&m_lock, 0);
31  }
33  {
34  pthread_rwlock_destroy(&m_lock);
35  }
36  void RdLock()
37  {
38  pthread_rwlock_rdlock(&m_lock);
39  }
40  void WrLock()
41  {
42  pthread_rwlock_wrlock(&m_lock);
43  }
44  void Unlock()
45  {
46  pthread_rwlock_unlock(&m_lock);
47  }
48 };
49 
50 class eRdLocker
51 {
52  eRdWrLock &m_lock;
53 public:
55  : m_lock(m)
56  {
57  pthread_rwlock_rdlock(&m_lock.m_lock);
58  }
60  {
61  pthread_rwlock_unlock(&m_lock.m_lock);
62  }
63 };
64 
65 class eWrLocker
66 {
67  eRdWrLock &m_lock;
68 public:
70  : m_lock(m)
71  {
72  pthread_rwlock_wrlock(&m_lock.m_lock);
73  }
75  {
76  pthread_rwlock_unlock(&m_lock.m_lock);
77  }
78 };
79 
81 {
82 protected:
83  pthread_mutex_t m_lock;
84 private:
85  eSingleLock(const eSingleLock &);
86 public:
88  {
89  pthread_mutex_init(&m_lock, 0);
90  }
92  {
93  pthread_mutex_destroy(&m_lock);
94  }
95  void lock()
96  {
97  pthread_mutex_lock(&m_lock);
98  }
99  void unlock()
100  {
101  pthread_mutex_unlock(&m_lock);
102  }
103  operator pthread_mutex_t&() { return m_lock; }
104 };
105 
107 {
108 private:
109  eCondition(const eCondition&);
110 protected:
111  pthread_cond_t m_cond;
112 public:
114  {
115  pthread_cond_init(&m_cond, 0);
116  }
118  {
119  pthread_cond_destroy(&m_cond);
120  }
121  void signal()
122  {
123  pthread_cond_signal(&m_cond);
124  }
125  void wait(pthread_mutex_t& mutex)
126  {
127  pthread_cond_wait(&m_cond, &mutex);
128  }
129  operator pthread_cond_t&() { return m_cond; }
130 };
131 
133 {
134 protected:
136 public:
138  : m_lock(m)
139  {
140  m_lock.lock();
141  }
143  {
144  m_lock.unlock();
145  }
146 };
147 
148 class eLock
149 {
150  pthread_mutex_t mutex;
151  pthread_cond_t cond;
152 
153  int counter, max;
154 public:
155  void lock(int res=100);
156  void unlock(int res=100);
157 
158  eLock(int max=100);
159  ~eLock();
160 };
161 
162 class eLocker
163 {
164  eLock &lock;
165  int res;
166 public:
167  eLocker(eLock &lock, int res=100);
168  ~eLocker();
169 };
170 
172 {
173  int v;
174  pthread_mutex_t mutex;
175  pthread_cond_t cond;
176 public:
177  eSemaphore();
178  ~eSemaphore();
179 
180  int down();
181  int decrement();
182  int up();
183  int value();
184 };
185 
186 #endif
Definition: elock.h:107
void signal()
Definition: elock.h:121
~eCondition()
Definition: elock.h:117
eCondition()
Definition: elock.h:113
void wait(pthread_mutex_t &mutex)
Definition: elock.h:125
pthread_cond_t m_cond
Definition: elock.h:111
Definition: elock.h:149
eLock(int max=100)
Definition: elock.cpp:25
void unlock(int res=100)
Definition: elock.cpp:15
~eLock()
Definition: elock.cpp:32
void lock(int res=100)
Definition: elock.cpp:4
Definition: elock.h:163
eLocker(eLock &lock, int res=100)
Definition: elock.cpp:38
~eLocker()
Definition: elock.cpp:43
Definition: elock.h:51
~eRdLocker()
Definition: elock.h:59
eRdLocker(eRdWrLock &m)
Definition: elock.h:54
Definition: elock.h:22
void RdLock()
Definition: elock.h:36
~eRdWrLock()
Definition: elock.h:32
void WrLock()
Definition: elock.h:40
eRdWrLock()
Definition: elock.h:28
void Unlock()
Definition: elock.h:44
Definition: elock.h:172
int down()
Definition: elock.cpp:61
~eSemaphore()
Definition: elock.cpp:55
int decrement()
Definition: elock.cpp:73
int up()
Definition: elock.cpp:84
eSemaphore()
Definition: elock.cpp:48
int value()
Definition: elock.cpp:95
Definition: elock.h:81
pthread_mutex_t m_lock
Definition: elock.h:83
void lock()
Definition: elock.h:95
void unlock()
Definition: elock.h:99
eSingleLock()
Definition: elock.h:87
~eSingleLock()
Definition: elock.h:91
Definition: elock.h:133
eSingleLock & m_lock
Definition: elock.h:135
eSingleLocker(eSingleLock &m)
Definition: elock.h:137
~eSingleLocker()
Definition: elock.h:142
Definition: elock.h:66
eWrLocker(eRdWrLock &m)
Definition: elock.h:69
~eWrLocker()
Definition: elock.h:74
Definition: elock.h:7
~singleLock()
Definition: elock.h:15
singleLock(pthread_mutex_t &m)
Definition: elock.h:10
mutex
Definition: Plugins/SystemPlugins/PositionerSetup/log.py:14
#define max(a, b)
Definition: region.cpp:7