在多线程编程中,经常会有多个线程操作一个数据对象的时候,特别是在访问临界资源的时候,这个时候往往最好的方案是在该代码段内只允许一个线程执行。下面是一个临界区的封装。
CCS.h
//临界区类 class CCS { public: CCS(void); ~CCS(void); private: CRITICAL_SECTION m_cs; //临界区 public: void Lock(); //设置 void UnLock(); //获取 };
CCS.cpp
CCS::CCS(void) { //初如化临界区 ::InitializeCriticalSection(&m_cs); } CCS::~CCS(void) { //销毁临界区 ::DeleteCriticalSection(&m_cs); } //锁 void CCS::Lock() { ::EnterCriticalSection(&m_cs); } //解锁 void CCS::UnLock() { ::LeaveCriticalSection(&m_cs); }
这样,我们在需要在某段代码内只允许一个线程访问的时候,直接调用 CSS类的Lock,然后在允许资源访问的时候调用UnLock即可。注意的是这两个函数是要一起使用的时候,不要在加锁之后没有解锁的时候返回,否则再次想锁住的时候,就会出现无法获取锁从而出现线程死等的现象,如果是主线程,界面就会卡死从而可能导致程序异常退出。
本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!