Robotics Library  0.6.2
Mutex.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2009, Markus Rickert
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 //
14 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 // POSSIBILITY OF SUCH DAMAGE.
25 //
26 
27 #ifndef _RL_UTIL_MUTEX_H_
28 #define _RL_UTIL_MUTEX_H_
29 
30 #ifdef WIN32
31 #include <windows.h>
32 #else // WIN32
33 #include <errno.h>
34 #include <pthread.h>
35 #endif // WIN32
36 
37 namespace rl
38 {
39  namespace util
40  {
41  class Mutex
42  {
43  public:
44  explicit Mutex() :
45  mutex()
46  {
47 #ifdef WIN32
48  InitializeCriticalSection(&(*this).mutex);
49 #else // WIN32
50  pthread_mutex_init(&(*this).mutex, NULL);
51 #endif // WIN32
52  }
53 
54  virtual ~Mutex()
55  {
56 #ifdef WIN32
57  DeleteCriticalSection(&(*this).mutex);
58 #else // WIN32
59  pthread_mutex_destroy(&(*this).mutex);
60 #endif // WIN32
61  }
62 
64  {
65  (*this).unlock();
66  return (*this);
67  }
68 
70  {
71  (*this).lock();
72  return (*this);
73  }
74 
75  void lock()
76  {
77 #ifdef WIN32
78  EnterCriticalSection(&(*this).mutex);
79 #else // WIN32
80  pthread_mutex_lock(&(*this).mutex);
81 #endif // WIN32
82  }
83 
84  bool tryLock()
85  {
86 #ifdef WIN32
87  return TryEnterCriticalSection(&(*this).mutex) ? true : false;
88 #else // WIN32
89  return pthread_mutex_trylock(&(*this).mutex) == EBUSY ? false : true;
90 #endif // WIN32
91  }
92 
93  void unlock()
94  {
95 #ifdef WIN32
96  LeaveCriticalSection(&(*this).mutex);
97 #else // WIN32
98  pthread_mutex_unlock(&(*this).mutex);
99 #endif // WIN32
100  }
101 
102  protected:
103 
104  private:
105 #ifdef WIN32
106  CRITICAL_SECTION mutex;
107 #else // WIN32
108  pthread_mutex_t mutex;
109 #endif // WIN32
110  };
111  }
112 }
113 
114 #endif // _RL_UTIL_MUTEX_H_
rl::util::Mutex::~Mutex
virtual ~Mutex()
Definition: Mutex.h:54
rl::util::Mutex::lock
void lock()
Definition: Mutex.h:75
rl::util::Mutex
Definition: Mutex.h:42
rl::util::Mutex::tryLock
bool tryLock()
Definition: Mutex.h:84
rl::util::Mutex::operator++
Mutex & operator++()
Definition: Mutex.h:63
rl::util::Mutex::operator--
Mutex & operator--()
Definition: Mutex.h:69
rl::util::Mutex::unlock
void unlock()
Definition: Mutex.h:93
rl::util::Mutex::mutex
pthread_mutex_t mutex
Definition: Mutex.h:108
rl::util::Mutex::Mutex
Mutex()
Definition: Mutex.h:44
rl
Definition: Ati.cpp:35