27 #ifndef _SPRINT_MUTEX_H
28 #define _SPRINT_MUTEX_H
63 #define USE_CRITICAL_SECTION
67 #ifdef USE_CRITICAL_SECTION
70 class mutex:
public sprint::uncopiable {
72 CRITICAL_SECTION m_cs;
78 ::InitializeCriticalSection(&m_cs);
82 ::DeleteCriticalSection(&m_cs);
87 ::EnterCriticalSection (&m_cs);
92 ::LeaveCriticalSection( &m_cs );
100 class mutex:
public sprint::uncopiable {
105 mutex(
const mutex & src) { }
111 m_mutex = ::CreateMutex(NULL, FALSE, NULL);
115 ::CloseHandle(m_mutex);
118 inline bool lock(
unsigned int timeout = INFINITE)
120 return ::WaitForSingleObject(m_mutex, timeout) == WAIT_OBJECT_0;
125 return ::ReleaseMutex(m_mutex);
128 inline HANDLE
operator HANDLE()
138 typedef mutex thread_mutex;
145 pthread_mutex_t m_mutex;
151 pthread_mutexattr_t attr;
153 pthread_mutexattr_init(&attr);
155 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
157 pthread_mutex_init(&m_mutex, &attr);
159 pthread_mutexattr_destroy(&attr);
164 pthread_mutex_destroy(&m_mutex);
169 return pthread_mutex_lock(&m_mutex);
174 pthread_mutex_unlock(&m_mutex);
177 inline pthread_mutex_t gethandle()
scoped_lock(T &m)
ctor: lock the resource
Definition: mutex.h:52
~scoped_lock()
dtor: unlock the resource
Definition: mutex.h:54
Mutex (implemented using pthread)
Definition: mutex.h:143