map的并发操作是不安全的,C++里边有红黑树实现的std::map和hash表  unordered_map。

在《C++并发编程实战》一书中的162页提供了一个细粒度锁的MAP数据结构。

使用了 boost的shared_mutex  (C++14已经支持,C++11没有)

使用了std::hash

大家可以参考这本书的实现,如果支持C++14的话可以不用boost。

我这里简单写一个对std::map整个数据结构加锁的简单的类,我是在自己写一些测试demo的时候可能会用。

#ifndef SAFE_MAP_H_
#define SAFE_MAP_H_
///< 不是最优的方案,因为锁住了整个数据结构
#include <map>
#include <mutex>
template<typename Key, typename Val>
class SafeMap
{
public:typedef typename std::map<Key, Val>::iterator this_iterator;typedef typename std::map<Key, Val>::const_iterator this_const_iterator;Val& operator [](const Key& key) {std::lock_guard<std::mutex> lk(mtx_);return dataMap_[key];}int erase(const Key& key ){std::lock_guard<std::mutex> lk(mtx_);return dataMap_.erase(key);}this_iterator find( const Key& key ){std::lock_guard<std::mutex> lk(mtx_);return dataMap_.find(key);}this_const_iterator find( const Key& key ) const{std::lock_guard<std::mutex> lk(mtx_);return dataMap_.find(key);}this_iterator end(){return dataMap_.end();}this_const_iterator end() const{return dataMap_.end();}private:std::map<Key, Val> dataMap_;  std::mutex mtx_;
};#endif //SAFE_MAP_H_

C++线程安全map (低效率)相关推荐

  1. 优化SQL步骤——查看SQL执行频率 || 定位低效率执行SQL

    优化SQL步骤 在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现, 但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对 ...

  2. sync.Map低层工作原理详解

    sync.Map低层工作原理详解 目录 为什么需要sync.Map?适合什么场景? sync.Map内部实现基本原理及结构体分析 sync.Map低层工作原理 1. 为什么需要sync.Map?适合什 ...

  3. 摈弃 Windows 低效率的工作方式,发掘 Linux 身上的 UNIX 气质

     [原文链接] 摈弃 Windows 低效率的工作方式,发掘 Linux 身上的 UNIX 气质 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Li ...

  4. 科技作者吴军:不用低效率的算法做事情

    世界上总有一些IT难题,需要有经验的人解决."如今已55岁的吴军,认为年龄与能力共同成长才是应对"35岁危机"之道,在过去的职业生涯中,吴军正是这样做的.本文,吴军通过讲 ...

  5. 吴军亲述编程生涯:不用低效率的算法做事情

    作者 | 吴军       责编 | 田玮靖 出品 | <新程序员>编辑部 世界上总有一些IT难题,需要有经验的人解决.如今已55岁的吴军,认为年龄与能力共同成长才是应对"35岁 ...

  6. JAVA线程安全Map解析

    JAVA线程安全Map解析 HashTable 结构 线程安全的实现 Collections.synchronizedMap 线程安全的实现 ConcurrentHashMap 线程安全的实现 Con ...

  7. Go sync.RWMutex 实现线程安全 map 读写

    关键词:读写锁 当然,go 语言已经内置提供了线程安全 map,即 sync.Map, 在这里只是用自己的方式实现简单的锁应用, 代码示例如下: import "sync"type ...

  8. GRE作文备考技巧怎样避免低效率重复劳动?

    gre作文如何备考?新gre作文写作题目更加具体,考察考生完成题目的过程中是否能够融合性批判思维和分析写作能力,以便更好地反应研究生院和商学院所需要思维方式,所以平时加强语言功底的同时还需要勤于思考分 ...

  9. 测试员老张发觉越努力越费劲,越加班时间却越不够用,只能陷入低效率的加班中,循环往复

    目录:导读 前言 一.测试方案 二.测试用例 三.性能测试 四.个人简历 五.各个面试题 六.总结 前言 都在面临些什么? 越努力越费劲,越加班时间却越不够用 张某某在一家老牌国企任职,在企业被并购前 ...

最新文章

  1. linux下poll和epoll内核源代码剖析
  2. python绘制动态模拟图-Python 模拟生成动态产生验证码图片的方法
  3. 硬盘和显卡的访问与控制(二)——《x86汇编语言:从实模式到保护模式》读书笔记02
  4. Laravel - Artisan 个人常用总结
  5. java同名过滤器_Gateway Redis令牌桶请求限流过滤器
  6. 请确定指定的驱动器中是否有盘_百格拉伺服驱动器维修常见故障现象及处理方法...
  7. strcpy和memcpy的区别?
  8. profile matlab,使用profile功能对Matlab性能调优
  9. lisp pl线线段数_样条曲线转多段线lisp
  10. 读书笔记之《随机漫步的傻瓜》
  11. python 获取MP4视频第一帧 | Python工具类
  12. ios开发/iphone开发 (收藏)
  13. 【ESP32之旅】ESP32C3 Arduino库使用方法
  14. [附源码]Nodejs计算机毕业设计基于Yigo平台库房管理系统Express(程序+LW)
  15. jquery实现图片拖动
  16. 传智播客WPF视频 第二节
  17. vue自动滚动组件 可以支持鼠标滚轮操作
  18. ROS 简单的跨浏览器通信
  19. tiny6410刷机教程
  20. 小米手环模拟门禁卡读卡失败_一个手环走天下?可以!

热门文章

  1. ViewDragHelper (三)- 打造仿陌陌视频播放页(深入篇)
  2. Hadoop学习笔记(系统的学习)
  3. 室内定位无线和蓝牙哪个更胜一筹?
  4. 时钟——CSS 动画
  5. C# 读取DXF全套实例 图形输出 控制台输出 dxf全部信息
  6. 贵阳大数据产业规模总量今年将达1560亿元
  7. etl工具大全做个记录
  8. Chrome浏览器屏蔽广告
  9. xcode打包iOS教程
  10. 什么是知识体系?如何搭建层次和结构化思维?