临界区的使用
1 /******************************* 2 *把临界区封装成简单的LOCK类 3 */ 4 #pragma once 5 #include <windows.h> 6 7 class CLHSectionLock 8 { 9 public: 10 CLHSectionLock(void) { ::InitializeCriticalSection(&m_cs); } 11 ~CLHSectionLock(void) { ::DeleteCriticalSection(&m_cs); } 12 void Lock() { ::EnterCriticalSection(&m_cs); } 13 void UnLock() { ::LeaveCriticalSection(&m_cs); } 14 private: 15 CRITICAL_SECTION m_cs; 16 }; 17 18 class CLHSimpleLock 19 { 20 public: 21 CLHSimpleLock(CLHSectionLock& lock):m_lock(lock) 22 { 23 m_lock.Lock(); 24 } 25 ~CLHSimpleLock() 26 { 27 m_lock.UnLock(); 28 } 29 private: 30 CLHSectionLock& m_lock; 31 };
使用临界区只需要简单两步:
1、首先定义全局变量 CLHSectionLock g_lock;
2、在多线程中药保护的数据前使用CLHSimpleLock simpleLock(g_lock);