多线程中使用stl容器
来源:互联网 发布:mysql该不该用join 编辑:程序博客网 时间:2024/05/16 16:12
在实际中,有时候要在多线程中使用一些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;
};
- 多线程中使用stl容器
- 多线程中使用迭代器 访问 STL 容器元素的越界问题
- C++ STL容器中erase的使用
- STL中容器使用erase()遍历删除
- STL 中 容器 list 的使用
- STL 中容器 map 的使用
- STL中list的容器使用介绍
- STL中一些容器的使用
- STL中set容器
- STL中关联容器
- STL中常见容器
- STL 中容器
- 【拿来主义】STL容器使用
- STL容器使用总结
- STL容器使用总结
- STL容器的使用
- STL容器vector使用
- STL容器deque使用
- 英特尔主流移动CPU参数知多少?
- Js字符串操作函数大全
- Silverlight Map Viewer for ArcGIS Server
- 超级实用:让你的摄像头变成文字扫描器
- 在Windows Vista系统下安装Windows Xp并设置双重启动
- 多线程中使用stl容器
- 放假
- 页面间传递变量的方法及使用范围的讨论
- 一个全英asp.net资源站点
- 怀念08,憧憬09;08盘点,09启航。
- 一位软件工程师的6年总结
- CNKI破解方法
- JavaScript打印和预览等
- 一段有意思的js