-
- class Lock
- {
- public:
- Lock()
- {
- InitializeCriticalSection( &m_Critic );
- }
- ~Lock()
- {
- DeleteCriticalSection( &m_Critic );
- }
- //
- /*
- * 进入临界区
- */
- InLock()
- {
- EnterCriticalSection( &m_Critic );
- }
- //
- /*
- * 离开临界区
- */
- OutLock()
- {
- LeaveCriticalSection( &m_Critic );
- }
- private:
- CRITICAL_SECTION m_Critic;
- };
- class AutoLock
- {
- public:
- AutoLock( Lock &pLock ):m_pLock( pLock )
- {
- pLock.InLock();
- }
- ~AutoLock()
- {
- m_pLock.OutLock();
- }
- private:
- Lock &m_pLock;
- };
- class Test
- {
- public:
- void Do();
- private:
- Loack m_Lock;
- }
- void Test::Do()
- {
- AutoLock lock( m_Lock );
- ......
- ......
- }