他小的有

VC++一个临界区的封装

在多线程编程中,经常会有多个线程操作一个数据对象的时候,特别是在访问临界资源的时候,这个时候往往最好的方案是在该代码段内只允许一个线程执行。下面是一个临界区的封装。

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即可。注意的是这两个函数是要一起使用的时候,不要在加锁之后没有解锁的时候返回,否则再次想锁住的时候,就会出现无法获取锁从而出现线程死等的现象,如果是主线程,界面就会卡死从而可能导致程序异常退出。

本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!

0
分享到:

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址