您的位置:首页 > 其它

多线程中使用stl容器

2009-01-16 17:19 218 查看
在实际中,有时候要在多线程中使用一些stl容器,为了保证安全,需要不断的加锁,解锁

下面我实现了一个类自动完成这些操作,感觉比较方便,特贴出来共享

/****************************************************
* 线程安全的容器类
* 可以为所有的容器提供临界区支持
* 使其成为线程安全的
* 如 CSafeContainer<std::list<int> > p;
* 那么调用 p->push_back 就是线程安全的
* 如果CSafeContainer<std::list<int> > *p;
* (*p)->push_back 按照这种方式调用
****************************************************/
template<typename T>
class CSafeContainer
{
public:
class CProxy
{
public:
CProxy(T* pObj,CCriticalSection* pCritical)
{
m_pObj = pObj;
m_pCritical = pCritical;
m_pCritical->Lock();
}
~CProxy()
{
if(m_pCritical)
{
m_pCritical->Unlock();
}
}
//返回真正的对象
T* operator ->()
{
return m_pObj;
}
private:
CCriticalSection* m_pCritical;
T* m_pObj;
};
CSafeContainer(){}
CSafeContainer(T obj)
{
m_Obj = obj;
}
CProxy operator ->()
{
//返回临时对象
return CProxy(&m_Obj,&m_Critical);
}
/*如果不需要进行同步则先使用改方法取出对象指针*/
T* Get()
{
return &m_Obj;
}
private:
CCriticalSection m_Critical;
T m_Obj;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: