当前位置: 首页 > news >正文

验证C++ map返回引用的线程安全问题

现象:没出现线程安全问题。

结论:这么写是线程安全的。 

// ConsoleApplication12.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <mutex>
#include <iostream>#include <unordered_map>using namespace std;class spin_lock
{
public:spin_lock(){}void lock(){_mutex.lock();}void unlock(){_mutex.unlock();}
private:std::mutex _mutex;
};class auto_lock
{
public:auto_lock(spin_lock* lock){_lock = lock;_lock->lock();}~auto_lock(){_lock->unlock();}
private:spin_lock* _lock;
};spin_lock m_lock;struct A
{int a;int b;std::string c;char d[1024];
};class my_hash_map
{
public:std::unordered_map<int, A> m;A& operator[] (const int& k){auto_lock lock(&m_lock);return m[k];}bool erase(const int& k){auto_lock lock(&m_lock);return m.erase(k);}public:
};my_hash_map m;void f()
{m[0].a = -1;while (1){for (int i = 0; i < 1000000; ++i){if (m[0].a != -1){cout << "=========================   m[0].a != -1" << endl;}}cout << "--" << endl;}
}int main()
{std::thread t = thread(f);while (1){for (int i = 1; i < 1000000; ++i){m[i].a = i - 1;}for (int i = 1; i < 1000000; ++i){m.erase(i);}}return 0;
}

相关文章:

  • 【C++ 顺序容器】
  • 剪贴板管理软件 Paste Wizard mac中文版功能特色
  • 解决 win11 vmware 中centos 网络不能访问外网
  • C++冒号的作用域
  • Ubuntu LTS 坚持 10 年更新不动摇
  • As Const:一个被低估的 TypeScript 特性
  • windows系统自动更新中断电导致系统无法开启
  • 单独封装export default .js 在引入
  • VSCode修改主题为Eclipse 绿色护眼模式
  • 使用easyui前端框架快速构建一个crud应用
  • 02-PostgreSQL的基本使用
  • cmake vs2022编译opencv4.5.2 x86 版本
  • vue3 开启 https
  • 机器学习实战——《跟着迪哥学Python数据分析与机器学习实战》
  • java压缩pdf体积,图片体积
  • [笔记] php常见简单功能及函数
  • 《剑指offer》分解让复杂问题更简单
  • CentOS 7 修改主机名
  • css系列之关于字体的事
  • mysql常用命令汇总
  • October CMS - 快速入门 9 Images And Galleries
  • VuePress 静态网站生成
  • Xmanager 远程桌面 CentOS 7
  • 初探 Vue 生命周期和钩子函数
  • 排序(1):冒泡排序
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端临床手札——文件上传
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 问题之ssh中Host key verification failed的解决
  • 我的业余项目总结
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (007)XHTML文档之标题——h1~h6
  • (1)(1.9) MSP (version 4.2)
  • (4)Elastix图像配准:3D图像
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (全注解开发)学习Spring-MVC的第三天
  • (小白学Java)Java简介和基本配置
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net 7 上传文件踩坑
  • .Net core 6.0 升8.0
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .netcore 获取appsettings
  • .net解析传过来的xml_DOM4J解析XML文件
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [2010-8-30]
  • [20150904]exp slow.txt
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬