1 #pragma once
2 
3 
4 namespace MT
5 {
6 	class ScopedGuard;
7 
8 	//
9 	//
10 	//
11 	class Mutex
12 	{
13 		::CRITICAL_SECTION criticalSection;
14 
15 	private:
16 
17 		Mutex(const Mutex &) {}
18 		void operator=(const Mutex &) {}
19 
20 	public:
21 
22 		Mutex()
23 		{
24 			::InitializeCriticalSection( &criticalSection );
25 		}
26 
27 		~Mutex()
28 		{
29 			::DeleteCriticalSection( &criticalSection );
30 		}
31 
32 		friend class MT::ScopedGuard;
33 
34 	private:
35 
36 		void Lock()
37 		{
38 			::EnterCriticalSection( &criticalSection );
39 		}
40 		void Unlock()
41 		{
42 			::LeaveCriticalSection( &criticalSection );
43 		}
44 
45 	};
46 
47 
48 }
49 
50 
51