在多线程编程中,经常会有多个线程操作一个数据对象的时候,特别是在访问临界资源的时候,这个时候往往最好的方案是在该代码段内只允许一个线程执行。下面是一个临界区的封装。
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即可。注意的是这两个函数是要一起使用的时候,不要在加锁之后没有解锁的时候返回,否则再次想锁住的时候,就会出现无法获取锁从而出现线程死等的现象,如果是主线程,界面就会卡死从而可能导致程序异常退出。
本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!