Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
useMutex.H
1 # ifndef USEMUTEX_H
2 # define USEMUTEX_H
3 
4 # include <autosprintf.h>
5 # include <pthread.h>
6 # include <errno.h>
7 # include <ahDefs.H>
8 # include <ahUtils.H>
9 
10 extern void init_mutex(pthread_mutex_t *);
11 
12 extern void init_mutex(pthread_mutex_t &);
13 
14 extern void destroy_mutex(pthread_mutex_t *);
15 
16 extern void destroy_mutex(pthread_mutex_t &);
17 
18 using namespace Aleph;
19 
20 class UseMutex
21 {
22  pthread_mutex_t * mutex;
23  bool unlock_when_destroy;
24 
25 public:
26 
27  void unlock()
28  {
29  if (mutex == NULL)
30  throw std::domain_error("unlock: NULL pointer to mutex");
31 
32  pthread_mutex_unlock(mutex);
33  }
34 
35  void lock()
36  {
37  if (mutex == NULL)
38  throw std::domain_error("lock: NULL pointer to mutex");
39 
40  pthread_mutex_lock(mutex);
41  }
42 
43  UseMutex(pthread_mutex_t *m) : mutex(m), unlock_when_destroy(true)
44  {
45  lock();
46  }
47 
48  UseMutex(pthread_mutex_t & m): mutex(&m), unlock_when_destroy(true)
49  {
50  lock();
51  }
52 
53  void enter() { lock(); }
54 
55  void leave() { unlock(); }
56 
57  ~UseMutex()
58  {
59  if (unlock_when_destroy)
60  unlock();
61  }
62 
63  void disallow_unlock() { unlock_when_destroy = false; }
64 
65  void allow_unlock() { unlock_when_destroy = true; }
66 };
67 
68 
69 # define CTOR_USE_MUTEX(name, mutex) name(mutex)
70 
71 # define CTOR_INH_USE_MUTEX(mutex) UseMutex(mutex)
72 
73 # define USE_MUTEX(name, mutex) UseMutex name(mutex)
74 
75 # define CRITICAL_SECTION(mutex) UseMutex critical_section(mutex)
76 
77 # endif // USEMUTEX_H
78 
79 
80 
Definition: useMutex.H:20

Leandro Rabindranath León