多线程环境下,我们如果用到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容器相关推荐

  1. 5.概念(maven,ssm,springMvc,spring,自定义注解,二级缓存,范式,事务,mysql,线程池,map,hashmap,redis,饿汉,懒汉)

    maven是啥: 1.Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架. 创建-导入jar报–编写配置文件-实现业务功能-测试-发布上线. 2.开发团队可以自动完 ...

  2. 《码农翻身》之技术之路

    <码农翻身>读书笔记之技术之路 这是我的后端读书笔记系列文章的第四三篇,选取的是最近刚刚圈粉的知名博主刘欣创作的<码农翻身>.这篇文章只是最后一部分内容. 本文内容主要根据知名 ...

  3. C++ 实现线程安全的map(OpenHarmony源码实现版)

    概述 STL容器不是线程安全的.比如对于vector,即使写方(生产者)是单线程写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效.实际表现也就是招致了co ...

  4. golang实现线程安全的map

    转载自:https://halfrost.com/go_map_chapter_one/ https://halfrost.com/go_map_chapter_two/ Map 是一种很常见的数据结 ...

  5. 怎样实现两个线程共享一个集合_面试高频考察点:几种线程安全的Map解析

    Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 看下面两个场景: 1.当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全不 ...

  6. 线程安全的map_面试必问-几种线程安全的Map解析

    HashMap线程安全的吗? Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 推荐阅读:我凭借这份pdf拿下了蚂蚁金服.字节跳动.小米等大厂的offer 看下面两个场景: ...

  7. 2018结束,新的开始 - CMU学弱走上技术之路

    (午饭前半小时写篇文章,篇幅不长,但是立下的flag就不能倒!) METALS@CMU - Chinese Manong University 18年春节后拿到了CMU一个硕士项目的Offer,Mas ...

  8. SAP License:SAP技术人员路在何方?

    作为一名技术人员,我总是对未来的前景感到一阵阵悲哀.有感于<SAP技术人员路在何方?>的文章,发表一点自身的感慨. 做为技术人员,大家都觉得工资高,工作稳定,还能学到很多的东西.是大部份走 ...

  9. 福利 | 2018 年,程序员全新的技术之路

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 年年岁岁花相似,岁岁年年人不同.新年伊始,看着朋友圈各种年终总结.新年新的 KPI,你是否会 ...

最新文章

  1. Boost:bzip2解压缩器
  2. 使用开源项目的正确姿势,都是血和泪的总结!
  3. Firefox常用插件
  4. vga焊接线顺序_焊接工艺问答,不做焊接也要收藏起来
  5. 【uC/OS-II】笔记1----入门
  6. jmeter 分布式
  7. mexopenCV的配置学习过程
  8. Python vs Cpython
  9. android Notification分析—— 您可能会遇到各种问题
  10. ECharts项目小结~
  11. nslookup测试网络命令
  12. BC26 OpenCPU RTC/PSM_EINT API接口
  13. 解决小程序图片上传问题
  14. 直播短视频源码如何编写uni-app登录功能界面
  15. 计算apk包的安装之后占用空间以及运行时占用内存
  16. sucess - money - freedom
  17. 如何解决苹果M1处理器Mac翻车问题
  18. 读PPK谈javascript
  19. python实训名片管理程序_python实现名片管理系统
  20. 迷宫求解(深度优先)

热门文章

  1. springboot之starters启动项
  2. python爬虫之scrapy框架
  3. 自定义View实现米老鼠时钟
  4. What is my IP?
  5. 听说满满的负能量的语句
  6. 游戏本推荐排行榜“黑马”游戏能力测评
  7. 时序竟态条件分析 sigsuspend函数 Linu系统编程
  8. 计算机专业排行美国四大,美国四大计算机专业牛校
  9. oracle linux unbreakable linux 6.1迅雷离线高速下载
  10. 基于python的银行信用卡客户等级预测系统