1 class IMyLock 2 { 3 public: 4 virtual ~IMyLock(){} 5 6 virtual void Lock() const = 0; 7 virtual void UnLock() const = 0; 8 }; 9 10 class Mutex : public IMyLock 11 { 12 public: 13 Mutex(); 14 ~Mutex(); 15 16 virtual void Lock() const; 17 virtual void UnLock() const; 18 private: 19 HANDLE Mutex_; 20 }; 21 22 Mutex::Mutex(){ 23 Mutex_ = ::CreateMutex(NULL, false, NULL); 24 } 25 26 void Mutex::Lock() const 27 { 28 WaitForSingleObject(Mutex_, INFINITE); 29 } 30 31 void Mutex::UnLock() const 32 { 33 ::ReleaseMutex(Mutex_); 34 } 35 36 class CLock{ 37 public: 38 CLock(const IMyLock&); 39 ~CLock(); 40 41 private: 42 const IMyLock& myLock_; //純虛類可以這樣聲明對象 43 }; 44 45 CLock::CLock(const IMyLock& lock) :myLock_(lock) 46 { 47 myLock_.Lock(); 48 } 49 CLock::~CLock(){ 50 myLock_.UnLock(); 51 }