Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
p6lock.h
Go to the documentation of this file.
1 
16 #ifndef P6LOCK_H__
17 #define P6LOCK_H__ 1
18 
19 #include "p6com.h"
20 
21 namespace P6R {
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 
39 interface p6ILock : p6ICom
40 {
41  P6COMMETHOD initialize() = 0;
42  P6COMMETHOD lock() = 0;
43  P6COMMETHOD unlock() = 0;
44 };
45 #define IF_p6ILock {0xD855D877,0x1196,0x4444,{0xAF,0x2B,0xA1,0x80,0x5C,0xA5,0x88,0x0B}}
46 #define COMP_p6Lock {0xC6E9AC1E,0xAC4D,0x46c8,{0xAE,0xB7,0x76,0x8A,0xDD,0xD2,0x43,0x7C}}
47 
75 interface p6IMonitor : p6ICom
76 {
86  P6COMMETHOD initialize() = 0;
87 
107  P6COMMETHOD lock() = 0;
108 
118  P6COMMETHOD unlock() = 0;
119 
120 
129  P6COMMETHOD wait() = 0;
130 
145  P6COMMETHOD waitTimed(P6R::P6INTERVAL tTimeout) = 0;
146 
153  P6COMMETHOD notify() = 0;
160  P6COMMETHOD notifyAll() = 0;
161 };
162 #define IF_p6IMonitor {0xAC0338DF,0x9B66,0x4c30,{0x89,0x4D,0x95,0x03,0x3B,0xD0,0xD6,0x82}}
163 #define COMP_p6Monitor {0xDEE214DF,0xAA66,0x4c0c,{0xA2,0x11,0x41,0x4A,0xDB,0x8F,0xBF,0x8A}}
164 
165 
192 interface p6ICondvar : p6ICom
193 {
205  P6COMMETHOD initialize(P6R::p6ILock *pLock) = 0;
206 
212  P6COMMETHOD wait() = 0;
213 
214 
215  P6COMMETHOD waitTimed(P6R::P6INTERVAL tTimeout) = 0;
216 
223  P6COMMETHOD notify() = 0;
224 
230  P6COMMETHOD notifyAll() = 0;
231 };
232 // {F50FA083-1363-464C-8E25-F571966D366E}
233 #define IF_p6ICondvar {0xF50FA083,0x1363,0x464C,{0x8E,0x25,0xF5,0x71,0x96,0x6D,0x36,0x6E}}
234 // {716C57F7-6A1C-41EC-8FB7-F20DC10B6D51}
235 #define COMP_p6Condvar {0x716C57F7,0x6A1C,0x41EC,{0x8F,0xB7,0xF2,0x0D,0xC1,0x0B,0x6D,0x51}}
236 
252 interface p6IRWLock : p6ICom
253 {
254 
261  P6COMMETHOD initialize() = 0;
262  P6COMMETHOD readLock() = 0;
263  P6COMMETHOD writeLock() = 0;
264  P6COMMETHOD unlock() = 0;
265 };
266 #define IF_p6IRWLock {0xE3FF0744,0x6679,0x4f90,{0xBA,0xDD,0x3A,0xB7,0xDB,0xE3,0xB6,0xEA}}
267 #define COMP_p6RWLock {0x2A9246EA,0x6D01,0x42de,{0xAE,0xC9,0xDA,0x5B,0x66,0x19,0xF4,0xF5}}
268 
274 typedef enum {
277 } P6RWLOCKMODE;
278 
279 #ifdef __cplusplus
280 }
281 #endif
282 
283 
290 {
291 public:
292  P6StackRWLock(p6IRWLock *pLock,P6RWLOCKMODE mode) : m_pLock(pLock), m_mode(mode)
293  {
294  if(m_pLock) {
295  m_pLock->addref();
296  if(P6WRITE_LOCK == m_mode) {
297  m_pLock->writeLock();
298  }
299  else {
300  m_pLock->readLock();
301  }
302  }
303  }
305  {
306  if(m_pLock) {
307  m_pLock->unlock();
308  m_pLock->release();
309  m_pLock = NULL;
310  }
311  }
312 
313 protected:
316 
317 private:
322  P6StackRWLock& operator=(const P6StackRWLock &);
323  P6StackRWLock(const P6StackRWLock &);
324 };
325 
327 {
328 public:
329  P6StackMonitor(p6IMonitor *pLock) : m_pLock(pLock)
330  { if(m_pLock) { m_pLock->addref(); m_pLock->lock();} }
332  { if(m_pLock) { m_pLock->unlock(); m_pLock->release(); } }
333 
334 protected:
336 
337 private:
341  P6StackMonitor& operator=(const P6StackMonitor &);
343 };
344 
366 {
367 public:
368  P6StackLock(p6ILock *pLock) : m_pLock(pLock)
369  { if(m_pLock) { m_pLock->addref(); m_pLock->lock();} }
371  { if(m_pLock) { m_pLock->unlock(); m_pLock->release(); } }
372 
373 protected:
375 
376 private:
380  P6StackLock& operator=(const P6StackLock &);
381  P6StackLock(const P6StackLock &);
382 };
383 
384 
385 } // namespace
386 
387 #endif
A intraprocess, reentrant lock/condition variable.
Definition: p6lock.h:75
Used to specify that the P6StackRWLock should perform a write lock operation.
Definition: p6lock.h:276
virtual P6R::P6ERR notify()=0
Notifies (wakes up) one waiting thread.
virtual P6R::P6ERR unlock()=0
This method is used to exit the monitor and must be called once for each cooresponding call to lock()...
P6R::p6IMonitor * m_pLock
Definition: p6lock.h:335
virtual P6R::P6ERR waitTimed(P6R::P6INTERVAL tTimeout)=0
Waits for another thread to call notify() or notifyAll(), or for the specified amount of time to elap...
virtual P6R::P6ERR lock()=0
This method is used to enter the monitor.
P6StackMonitor(p6IMonitor *pLock)
Definition: p6lock.h:329
virtual P6R::P6ERR notifyAll()=0
Notifies (wakes up) all waiting threads.
Conditional variable.
Definition: p6lock.h:192
virtual P6R::P6ERR initialize()=0
Reader/Writer locking.
Definition: p6lock.h:252
Non-reentrant, mutual exclusion lock.
Definition: p6lock.h:39
Stack based read/writer lock.
Definition: p6lock.h:289
virtual P6R::P6ERR initialize(P6R::p6ILock *pLock)=0
Initializes the condition variable for use.
The base interface all [p6]COM components must derive from and implement.
Definition: p6comdef.h:96
virtual P6R::P6ERR initialize()=0
Initializes the monitor for use.
P6R::P6RWLOCKMODE m_mode
Definition: p6lock.h:315
P6StackLock(p6ILock *pLock)
Definition: p6lock.h:368
virtual P6R::P6ERR unlock()=0
P6StackRWLock(p6IRWLock *pLock, P6RWLOCKMODE mode)
Definition: p6lock.h:292
virtual P6R::P6ERR wait()=0
Wait for notify(), notifyall() to be called.
virtual P6R::P6ERR unlock()=0
Used to specify that the P6StackRWLock should perform a read lock operation.
Definition: p6lock.h:275
virtual P6R::P6ERR lock()=0
virtual P6R::P6ERR writeLock()=0
#define P6COMMETHOD
Definition: p6types.h:872
P6RWLOCKMODE
Defines the lock mode for a readers/writer stack lock.
Definition: p6lock.h:274
P6R::p6ILock * m_pLock
Definition: p6lock.h:374
P6R::p6IRWLock * m_pLock
Definition: p6lock.h:314
#define P6NOEXPORT
Definition: p6types.h:866
Stack based non-reentrant lock.
Definition: p6lock.h:365
P6COM definitions and interfaces.
virtual P6R::P6ERR readLock()=0
virtual P6R::P6ERR notify()=0
Notifies (wakes up) one waiting thread.
virtual P6R::P6ERR initialize()=0
Initializes the lock for use.
virtual P6R::P6ERR wait()=0
Waits for another thread to call notify() or notifyAll().
virtual P6R::P6ERR waitTimed(P6R::P6INTERVAL tTimeout)=0
virtual P6R::P6ERR notifyAll()=0
Notifies (wakes up) ALL waiting thread.