C++技术之路:线程安全的map容器
多线程环境下,我们如果用到map容器,我们就需要对map加锁。我们直接上代码,记录下我平时的代码。
template< typename K, typename D >
class CStlClassMapLock
{public:CStlClassMapLock() { }virtual ~CStlClassMapLock() {this->TsClear();}public:
public:D* TsAddItem(K kAa){boost::recursive_mutex::scoped_lock lock(m_mutex);typename CStlClassMapData::iterator it = m_TsMap.find(kAa);if(it != m_TsMap.end())return it->second;D *pItem = new D(kAa);if(!pItem)return 0;m_TsMap[kAa] = pItem;return pItem;}D* TsGetItem(K kAa){boost::recursive_mutex::scoped_lock lock(m_mutex);typename CStlClassMapData::iterator it = m_TsMap.find(kAa);if(it == m_TsMap.end())return 0;return it->second;}D* TsGetFrontItem(K& kAa){boost::recursive_mutex::scoped_lock lock(m_mutex);typename CStlClassMapData::iterator it = m_TsMap.begin();if (it == m_TsMap.end()){return 0;}kAa = it->first;return it->second;}bool TsRemove(K kAa){boost::recursive_mutex::scoped_lock lock(m_mutex);D* pItem = this->ZcGetItem(kAa);if(!pItem)return false;m_TsMap.erase(kAa);delete pItem;return true;}void TsClear(){boost::recursive_mutex::scoped_lock lock(m_mutex);typename CStlClassMapData::iterator it = m_TsMap.begin();for(;it != m_TsMap.end(); it++){D *pItem = it->second;delete pItem;}m_TsMap.clear();}void TsGetAllItem(list<D*> &tList){boost::recursive_mutex::scoped_lock lock(m_mutex);typename CStlClassMapData::iterator it = m_TsMap.begin();for(;it != m_TsMap.end(); it++) {tList.push_back(it->second);}}void TsGetAllK(list<K> &tList){boost::recursive_mutex::scoped_lock lock(m_mutex);typename CStlClassMapData::iterator it = m_TsMap.begin();for(;it != m_TsMap.end(); it++) {tList.push_back(it->first);}}int TsGetTotalCt(){boost::recursive_mutex::scoped_lock lock(m_mutex);return m_TsMap.size();}protected:boost::recursive_mutex m_mutex;typedef map<K,D*> CStlClassMapData;CStlClassMapData m_TsMap;};
C++技术之路:线程安全的map容器相关推荐
- 5.概念(maven,ssm,springMvc,spring,自定义注解,二级缓存,范式,事务,mysql,线程池,map,hashmap,redis,饿汉,懒汉)
maven是啥: 1.Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架. 创建-导入jar报–编写配置文件-实现业务功能-测试-发布上线. 2.开发团队可以自动完 ...
- 《码农翻身》之技术之路
<码农翻身>读书笔记之技术之路 这是我的后端读书笔记系列文章的第四三篇,选取的是最近刚刚圈粉的知名博主刘欣创作的<码农翻身>.这篇文章只是最后一部分内容. 本文内容主要根据知名 ...
- C++ 实现线程安全的map(OpenHarmony源码实现版)
概述 STL容器不是线程安全的.比如对于vector,即使写方(生产者)是单线程写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效.实际表现也就是招致了co ...
- golang实现线程安全的map
转载自:https://halfrost.com/go_map_chapter_one/ https://halfrost.com/go_map_chapter_two/ Map 是一种很常见的数据结 ...
- 怎样实现两个线程共享一个集合_面试高频考察点:几种线程安全的Map解析
Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 看下面两个场景: 1.当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全不 ...
- 线程安全的map_面试必问-几种线程安全的Map解析
HashMap线程安全的吗? Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 推荐阅读:我凭借这份pdf拿下了蚂蚁金服.字节跳动.小米等大厂的offer 看下面两个场景: ...
- 2018结束,新的开始 - CMU学弱走上技术之路
(午饭前半小时写篇文章,篇幅不长,但是立下的flag就不能倒!) METALS@CMU - Chinese Manong University 18年春节后拿到了CMU一个硕士项目的Offer,Mas ...
- SAP License:SAP技术人员路在何方?
作为一名技术人员,我总是对未来的前景感到一阵阵悲哀.有感于<SAP技术人员路在何方?>的文章,发表一点自身的感慨. 做为技术人员,大家都觉得工资高,工作稳定,还能学到很多的东西.是大部份走 ...
- 福利 | 2018 年,程序员全新的技术之路
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 年年岁岁花相似,岁岁年年人不同.新年伊始,看着朋友圈各种年终总结.新年新的 KPI,你是否会 ...
最新文章
- Boost:bzip2解压缩器
- 使用开源项目的正确姿势,都是血和泪的总结!
- Firefox常用插件
- vga焊接线顺序_焊接工艺问答,不做焊接也要收藏起来
- 【uC/OS-II】笔记1----入门
- jmeter 分布式
- mexopenCV的配置学习过程
- Python vs Cpython
- android Notification分析—— 您可能会遇到各种问题
- ECharts项目小结~
- nslookup测试网络命令
- BC26 OpenCPU RTC/PSM_EINT API接口
- 解决小程序图片上传问题
- 直播短视频源码如何编写uni-app登录功能界面
- 计算apk包的安装之后占用空间以及运行时占用内存
- sucess - money - freedom
- 如何解决苹果M1处理器Mac翻车问题
- 读PPK谈javascript
- python实训名片管理程序_python实现名片管理系统
- 迷宫求解(深度优先)