Main Page Class List Class Members

vhacdMutex.h
Go to the documentation of this file.
1
49 #pragma once
50 #ifndef VHACD_MUTEX_H
51 #define VHACD_MUTEX_H
52
53 #if defined(WIN32)
54
55 #ifndef _WIN32_WINNT
56 #define _WIN32_WINNT 0x400
57 #endif
58 #include <windows.h>
59 #pragma comment(lib, "winmm.lib")
60 #endif
61
62 #if defined(__linux__)
63 //#include <sys/time.h>
64 #include <errno.h>
65 #include <time.h>
66 #include <unistd.h>
67 #define __stdcall
68 #endif
69
70 #if defined(__APPLE__) || defined(__linux__)
71 #include <pthread.h>
72 #endif
73
74 #if defined(__APPLE__)
75 #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
76 #endif
77
78 #define VHACD_DEBUG
79
80 //#define VHACD_NDEBUG
81 #ifdef VHACD_NDEBUG
82 #define VHACD_VERIFY(x) (x)
83 #else
84 #define VHACD_VERIFY(x) assert((x))
85 #endif
86
87 namespace VHACD {
88 class Mutex {
89 public:
90 Mutex(void)
91 {
92 #if defined(WIN32) || defined(_XBOX)
93 InitializeCriticalSection(&m_mutex);
94 #elif defined(__APPLE__) || defined(__linux__)
95 pthread_mutexattr_t mutexAttr; // Mutex Attribute
96 VHACD_VERIFY(pthread_mutexattr_init(&mutexAttr) == 0);
97 VHACD_VERIFY(pthread_mutexattr_settype(&mutexAttr, PTHREAD_MUTEX_RECURSIVE_NP) == 0);
98 VHACD_VERIFY(pthread_mutex_init(&m_mutex, &mutexAttr) == 0);
99 VHACD_VERIFY(pthread_mutexattr_destroy(&mutexAttr) == 0);
100 #endif
101 }
102 ~Mutex(void)
103 {
104 #if defined(WIN32) || defined(_XBOX)
105 DeleteCriticalSection(&m_mutex);
106 #elif defined(__APPLE__) || defined(__linux__)
107 VHACD_VERIFY(pthread_mutex_destroy(&m_mutex) == 0);
108 #endif
109 }
110 void Lock(void)
111 {
112 #if defined(WIN32) || defined(_XBOX)
113 EnterCriticalSection(&m_mutex);
114 #elif defined(__APPLE__) || defined(__linux__)
115 VHACD_VERIFY(pthread_mutex_lock(&m_mutex) == 0);
116 #endif
117 }
118 bool TryLock(void)
119 {
120 #if defined(WIN32) || defined(_XBOX)
121 bool bRet = false;
122 //assert(("TryEnterCriticalSection seems to not work on XP???", 0));
123 bRet = TryEnterCriticalSection(&m_mutex) ? true : false;
124 return bRet;
125 #elif defined(__APPLE__) || defined(__linux__)
126 int32_t result = pthread_mutex_trylock(&m_mutex);
127 return (result == 0);
128 #endif
129 }
130
131 void Unlock(void)
132 {
133 #if defined(WIN32) || defined(_XBOX)
134 LeaveCriticalSection(&m_mutex);
135 #elif defined(__APPLE__) || defined(__linux__)
136 VHACD_VERIFY(pthread_mutex_unlock(&m_mutex) == 0);
137 #endif
138 }
139
140 private:
141 #if defined(WIN32) || defined(_XBOX)
142 CRITICAL_SECTION m_mutex;
143 #elif defined(__APPLE__) || defined(__linux__)
144 pthread_mutex_t m_mutex;
145 #endif
146 };
147 }
148 #endif // VHACD_MUTEX_H
VHACD::Mutex
Definition: vhacdMutex.h:88
VHACD::Mutex::TryLock
bool TryLock(void)
Definition: vhacdMutex.h:118
VHACD::Mutex::~Mutex
~Mutex(void)
Definition: vhacdMutex.h:102
VHACD::Mutex::Mutex
Mutex(void)
Definition: vhacdMutex.h:90
VHACD::Mutex::Lock
void Lock(void)
Definition: vhacdMutex.h:110
VHACD::Mutex::Unlock
void Unlock(void)
Definition: vhacdMutex.h:131
VHACD
Definition: vhacdCircularList.h:19
VHACD_VERIFY
#define VHACD_VERIFY(x)
Definition: vhacdMutex.h:84