C++线程安全map (低效率)
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 (低效率)相关推荐
- 优化SQL步骤——查看SQL执行频率 || 定位低效率执行SQL
优化SQL步骤 在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现, 但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对 ...
- sync.Map低层工作原理详解
sync.Map低层工作原理详解 目录 为什么需要sync.Map?适合什么场景? sync.Map内部实现基本原理及结构体分析 sync.Map低层工作原理 1. 为什么需要sync.Map?适合什 ...
- 摈弃 Windows 低效率的工作方式,发掘 Linux 身上的 UNIX 气质
[原文链接] 摈弃 Windows 低效率的工作方式,发掘 Linux 身上的 UNIX 气质 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Li ...
- 科技作者吴军:不用低效率的算法做事情
世界上总有一些IT难题,需要有经验的人解决."如今已55岁的吴军,认为年龄与能力共同成长才是应对"35岁危机"之道,在过去的职业生涯中,吴军正是这样做的.本文,吴军通过讲 ...
- 吴军亲述编程生涯:不用低效率的算法做事情
作者 | 吴军 责编 | 田玮靖 出品 | <新程序员>编辑部 世界上总有一些IT难题,需要有经验的人解决.如今已55岁的吴军,认为年龄与能力共同成长才是应对"35岁 ...
- JAVA线程安全Map解析
JAVA线程安全Map解析 HashTable 结构 线程安全的实现 Collections.synchronizedMap 线程安全的实现 ConcurrentHashMap 线程安全的实现 Con ...
- Go sync.RWMutex 实现线程安全 map 读写
关键词:读写锁 当然,go 语言已经内置提供了线程安全 map,即 sync.Map, 在这里只是用自己的方式实现简单的锁应用, 代码示例如下: import "sync"type ...
- GRE作文备考技巧怎样避免低效率重复劳动?
gre作文如何备考?新gre作文写作题目更加具体,考察考生完成题目的过程中是否能够融合性批判思维和分析写作能力,以便更好地反应研究生院和商学院所需要思维方式,所以平时加强语言功底的同时还需要勤于思考分 ...
- 测试员老张发觉越努力越费劲,越加班时间却越不够用,只能陷入低效率的加班中,循环往复
目录:导读 前言 一.测试方案 二.测试用例 三.性能测试 四.个人简历 五.各个面试题 六.总结 前言 都在面临些什么? 越努力越费劲,越加班时间却越不够用 张某某在一家老牌国企任职,在企业被并购前 ...
最新文章
- linux下poll和epoll内核源代码剖析
- python绘制动态模拟图-Python 模拟生成动态产生验证码图片的方法
- 硬盘和显卡的访问与控制(二)——《x86汇编语言:从实模式到保护模式》读书笔记02
- Laravel - Artisan 个人常用总结
- java同名过滤器_Gateway Redis令牌桶请求限流过滤器
- 请确定指定的驱动器中是否有盘_百格拉伺服驱动器维修常见故障现象及处理方法...
- strcpy和memcpy的区别?
- profile matlab,使用profile功能对Matlab性能调优
- lisp pl线线段数_样条曲线转多段线lisp
- 读书笔记之《随机漫步的傻瓜》
- python 获取MP4视频第一帧 | Python工具类
- ios开发/iphone开发 (收藏)
- 【ESP32之旅】ESP32C3 Arduino库使用方法
- [附源码]Nodejs计算机毕业设计基于Yigo平台库房管理系统Express(程序+LW)
- jquery实现图片拖动
- 传智播客WPF视频 第二节
- vue自动滚动组件 可以支持鼠标滚轮操作
- ROS 简单的跨浏览器通信
- tiny6410刷机教程
- 小米手环模拟门禁卡读卡失败_一个手环走天下?可以!