11 #ifndef _INCLUDE_MUTEX_H_
12 #define _INCLUDE_MUTEX_H_
14 #include <drift/Threading.h>
25 #if !defined(DSL_DEFAULT_MUTEX_TIMEOUT)
26 #define DSL_DEFAULT_MUTEX_TIMEOUT -1
34 virtual bool Lock(
int timeout)=0;
35 virtual bool Lock()=0;
36 virtual void Release()=0;
38 virtual void SetLockTimeout(
int timeout)=0;
39 virtual bool IsLocked()=0;
40 virtual bool IsLockMine()=0;
42 virtual THREADIDTYPE LockingThread()=0;
49 #if defined(WIN32) || defined(XBOX)
53 THREADIDTYPE LockingThreadID;
58 DSL_Mutex_Win32CS(
int timeout = DSL_DEFAULT_MUTEX_TIMEOUT);
59 virtual ~DSL_Mutex_Win32CS();
61 bool Lock(
int timeout);
65 void SetLockTimeout(
int timeout) {
66 lock_timeout = timeout;
71 THREADIDTYPE LockingThread();
76 THREADIDTYPE LockingThreadID;
81 DSL_Mutex_Win32Mutex(
int timeout = DSL_DEFAULT_MUTEX_TIMEOUT,
const char * name = NULL);
82 virtual ~DSL_Mutex_Win32Mutex();
84 bool Lock(
int timeout);
88 void SetLockTimeout(
int timeout) {
89 lock_timeout = timeout;
94 THREADIDTYPE LockingThread();
97 #if DSL_DEFAULT_MUTEX_TIMEOUT > 0
98 #define DSL_Mutex DSL_Mutex_Win32Mutex
99 #define DSL_TimedMutex DSL_Mutex_Win32Mutex
101 #define DSL_Mutex DSL_Mutex_Win32CS
102 #define DSL_TimedMutex DSL_Mutex_Win32Mutex
109 THREADIDTYPE LockingThreadID;
112 pthread_mutex_t hMutex;
117 bool Lock(
int timeout);
121 void SetLockTimeout(
int timeout) {
122 lock_timeout = timeout;
127 THREADIDTYPE LockingThread();
130 #define DSL_Mutex DSL_Mutex_pthreads
131 #define DSL_TimedMutex DSL_Mutex_pthreads
137 #define LockMutex(x) { \
138 OutputDebugString("DSL_Mutex::Lock()\n"); \
139 printf("DSL_Mutex::Lock(%s, %d)\n", __FILE__, __LINE__); \
141 OutputDebugString("DSL_Mutex::Locked()\n"); \
142 printf("DSL_Mutex::Locked(%s, %d)\n", __FILE__, __LINE__); \
144 #define LockMutexPtr(x) { \
145 OutputDebugString("DSL_Mutex::Lock()\n"); \
146 printf("DSL_Mutex::Lock(%s, %d)\n", __FILE__, __LINE__); \
148 OutputDebugString("DSL_Mutex::Locked()\n"); \
149 printf("DSL_Mutex::Locked(%s, %d)\n", __FILE__, __LINE__); \
151 #define RelMutex(x) { printf("DSL_Mutex::Release(%s, %d)\n", __FILE__, __LINE__); x.Release(); }
152 #define RelMutexPtr(x) { OutputDebugString("DSL_Mutex::Release()\n"); printf("DSL_Mutex::Release(%s, %d)\n", __FILE__, __LINE__); x->Release(); printf("DSL_Mutex::Released(%s, %d)\n", __FILE__, __LINE__); OutputDebugString("DSL_Mutex::Released()\n"); }
154 #define LockMutex(x) x.Lock()
155 #define LockMutexPtr(x) x->Lock()
156 #define TryLockMutex(x, y) x.Lock(y)
157 #define TryLockMutexPtr(x, y) x->Lock(y)
158 #define RelMutex(x) x.Release()
159 #define RelMutexPtr(x) x->Release()
178 OutputDebugString(
"DSL_Mutex::Lock()\n");
179 printf(
"DSL_Mutex::Lock(%s, %d)\n", fn.c_str(), line);
181 OutputDebugString(
"DSL_Mutex::Locked()\n");
182 printf(
"DSL_Mutex::Locked(%s, %d)\n", fn.c_str(), line);
185 OutputDebugString(
"DSL_Mutex::Release()\n");
186 printf(
"DSL_Mutex::Release(%s, %d)\n", fn.c_str(), line);
187 if (hMutex->IsLockMine()) {
190 printf(
"DSL_Mutex::Released(%s, %d)\n", fn.c_str(), line);
191 OutputDebugString(
"DSL_Mutex::Released()\n");
199 if (hMutex->IsLockMine()) {
207 #define AutoMutex(x) DSL_MutexLocker MAKE_UNIQUE_NAME (&x, __FILE__, __LINE__)
208 #define AutoMutexPtr(x) DSL_MutexLocker MAKE_UNIQUE_NAME (x, __FILE__, __LINE__)
210 #define AutoMutex(x) DSL_MutexLocker MAKE_UNIQUE_NAME (&x)
211 #define AutoMutexPtr(x) DSL_MutexLocker MAKE_UNIQUE_NAME (x)
219 DSL_Mutex * dslMutex();