#pragma once
#ifdef _WIN32
#include <windows.h>
typedef DWORD TSemWaitTimeout;
class TMutexLock
{
private :
HANDLE m_mutex;
public:
TMutexLock()
{
m_mutex = CreateMutex(NULL, false, NULL);
}
~TMutexLock()
{
if (NULL != m_mutex)
{
CloseHandle(m_mutex);
}
}
bool Lock(TSemWaitTimeout dwMilliseconds=INFINITE)
{
if (NULL == m_mutex)
{
return false;
}
return WAIT_OBJECT_0 == WaitForSingleObject(m_mutex, INFINITE);
}
void Unlock()
{
ReleaseMutex(m_mutex);
}
};
#else
#include <pthread.h>
class TMutexLock
{
private :
pthread_mutex_t m_mutex;
public:
TMutexLock()
{
pthread_mutex_init(&m_mutex, NULL);
}
~TMutexLock()
{
if (NULL != m_mutex)
{
pthread_mutex_destroy(&m_mutex);
}
}
bool Lock()
{
if (NULL == m_mutex)
{
return false;
}
return 0 == pthread_mutex_lock(&m_mutex);
}
void Unlock()
{
pthread_mutex_unlock(&m_mutex);
}
};
#endif