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