#pragma once
#ifndef _GLWEBTOOLS_MUTEX_INCLUDED_
#define _GLWEBTOOLS_MUTEX_INCLUDED_
#include <glwebtools/internal/glwebtools_common.h>
namespace glwebtools
{
class Condition;
class Mutex : public NonCopyable
{
public:
Mutex();
~Mutex();
void Lock();
void Unlock();
bool TryLock();
private:
void* m_handler;
friend class Condition;
};
struct LockScope : public NonCopyable
{
LockScope(glwebtools::Mutex& mutex)
:m_mutex(mutex)
{
m_mutex.Lock();
}
~LockScope()
{
m_mutex.Unlock();
}
glwebtools::Mutex& m_mutex;
};
}
#endif //_GLWEBTOOLS_MUTEX_INCLUDED_