#pragma once

class CriticalSection
{
public:
	CriticalSection();
	~CriticalSection(void);

	void enter(void);
	void leave(void);

private:
	CriticalSection(const CriticalSection&);				// Disable copy constructor
	CriticalSection& operator=(const CriticalSection&);		// Disable assignment
	void * m_cs;
};

class CGuard
{
public:
	CGuard(CriticalSection& sectionName) : m_cs(sectionName)
	{
		m_cs.enter();
	}
	~CGuard()
	{
		m_cs.leave();
	}
private:
	CriticalSection& m_cs;
	CGuard(const CGuard& copy);
	CGuard &operator=(const CGuard& rhs);
};

