是否可以在C++中实现无锁映射

2024-02-27

我们正在开发一个基于C/S的网络应用程序,我们发现std::map添加了太多的锁,导致服务器的性能变差。

我想知道是否可以实现无锁映射,如果可以,如何实现?那里有开源代码吗?

编辑: 实际上我们使用std::map来存储socket信息,我们根据socket文件描述进行封装,包括一些其他必要的信息,如ip地址、端口、socket类型、tcp或udp等。

总而言之,我们有一张全球地图

map<int fileDescriptor, socketInfor*> SocketsMap, 

那么每个用于发送数据的线程都需要访问SocketsMap,并且在从SocketsMap读取或写入SocketsMap之前都必须添加互斥锁,这样整个应用程序的并发水平就会因为向SocketsMap添加如此多的锁而大大降低。

为了避免并发级别问题,我们有两种解决方案:1.单独存储每个socketInfor* 2.使用某种无锁映射。

我想找到某种无锁的映射,因为该解决方案所需的代码更改比解决方案1要少得多。


其实是有办法的,虽然我自己没有实现过,但是有一篇论文介绍了使用危险指针锁定免费地图 http://erdani.com/publications/cuj-2004-12.pdf来自著名 C++ 专家 Andrei Alexandrescu。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在C++中实现无锁映射 的相关文章

随机推荐

  • Android 中为什么有这么多内部类?

    我是Android开发的新鱼 在阅读书籍和Android源代码时 我发现Android应用程序中有很多内部类 为什么Android需要这么多内部类 我对这些内部类感到困惑 它们通常是实现设计的最有效的方式 内部类可以访问包含它的类的私有成员
  • Linq 上下文对象未注册为 System.IDisposable 对象类型

    我正在尝试在 using 语句中使用我的 上下文 对象 它适用于一个项目 但在另一个项目上 我收到以下错误 using 语句中使用的类型必须是隐式可转换的 到 System IDisposable 当我提到 上下文 对象时 我指的是使用 L
  • .NET 4 ObjectCache - 我们可以挂钩“缓存过期”事件吗?

    我有一个简单的对象被缓存 如下所示 myCache Add someKey someObj policy Where myCache被声明为ObjectCache 但通过 DI 注入MemoryCache Default someObj是我
  • 如何调试Python内存故障?

    编辑 非常感谢在查找错误方面的帮助 但由于它可能很难找到 重现 任何一般的调试帮助也将不胜感激 帮助我帮助我自己 编辑2 缩小范围 注释掉代码 编辑3 看来lxml可能不是罪魁祸首 谢谢 完整的脚本是here http pastebin c
  • 将作为列表的字符串转换为适当的列表python

    如何将这个列表字符串转换为正确的列表 mylist KYS Q5Aa8 KYS Q5Aa9 我尝试过 但这不是我所期望的 print mylist split KYS Q5Aa8 KYS Q5Aa9 我想要这样的 KYS Q5Aa8 KYS
  • 使用 ng-content 在父组件中进行模板驱动的表单验证

    过去几天我一直在寻找答案 但找不到解决方案 我有一个基本页面组件 所有其他页面都扩展了它 因为涉及很多临时页面 在我的场景中 我创建了一个模态和一个 ng content 选择器 以便在需要时填充输入 Codes 基本页面列表 compon
  • 如何将 ValueConverter 应用于基于约定的 Caliburn.Micro 绑定示例?

    我看到了以下问题 如何将值转换器应用到基于约定的 caliburn 微绑定 https stackoverflow com questions 6581674 how do you apply a valueconverter to a c
  • UICollectionView执行BatchUpdates导致旋转设备时collectionview错位

    如果我旋转设备 同时使用 reloadItemsAtIndexPaths 执行 CollectionView PerformBatchUpdate 集合视图将被放错位置 但视图仍将保持在恒定位置 要简单地解决此问题 setting UIVi
  • 如何从 SQL 中的连接中删除重复的列

    我有以下代码 SELECT FROM customer INNER JOIN SELECT customerid newspapername enddate n publishedby FROM newspapersubscription
  • 用于复制到 Redshift 的 Java sdk

    是否可以通过 java jdbc 连接触发从 S3 到 Redshift 的复制命令 例子 从 s3 凭证复制测试 aws access key id xxxxxxx aws secret access key xxxxxxxx 是的 尝试
  • Button.findViewById() 上的 NullPointerException

    我按照教程在 Android Studio 中创建了一个对话框 我的代码在 Java 文件中没有显示错误 但显示 不幸的是应用程序已停止工作 我不知道为什么 我的java文件 import android app AlertDialog i
  • 尝试在 Android Studio 中重命名包,但显示文件 (com) 已存在

    我在 Android Studio 中创建了一个新应用程序 一切都很顺利 我创建了一个签名的 apk 但是我在 Play Store 上发布了一个旧应用程序 我设法找到了那个旧应用程序的 key keystore 这也是我最初在 Eclip
  • 如何将两个坐标列转换为一列 Shapely 点

    我正在尝试对整个列执行操作 但出现类型错误 我想创建一个包含匀称点 https shapely readthedocs io en latest manual html points crime df crime df crime df L
  • 如何使用 next 在 AWS S3 上托管静态文件?

    我来自 Django 背景 其中静态文件主要存储在 S3 上 我试图了解它在 NodeJS 上的工作原理 因为我想将应用程序从 Django React 迁移到 NodeJS NextJS ExpressJS React 我不知道如何以及在
  • 如何在 Unity3D 中使用 NVIDIA FleX 制作软体果冻球体?

    我目前正在使用NVIDIA Flex 封装 https assetstore unity com packages tools physics nvidia flex for unity 1 0 beta 120425在 Unity3D 中
  • 如何绘制多个图表并使用 [matplotlib] 中的导航按钮

    最新版本matplotlib自动在下面创建导航按钮graph 然而 我在互联网上看到的例子都只是展示如何创建一个图表 从而使按钮 Next and Previous 无用 如何绘制多个图表并使用这些按钮 例如我想做graph for sin
  • 如何将事件参数记录到 Firebase 控制台 [重复]

    这个问题在这里已经有答案了 我刚刚开始使用 Firebase 进行应用程序分析 在尝试查看与我的事件关联的自定义参数时遇到一些问题 问题是 在创建受众时 我可以看到所有事件 但无法深入查看参数 没有显示与事件关联的参数 例如 我想注册 将零
  • Django 模板中的聚合?

    我正在思考这个概念Django 聚合 http docs djangoproject com en dev topics db aggregation 我不太 明白 如何在我的案例中使用它们 基本上 我的模型中有一个三层对象层次结构 最低的
  • 我应该进行外观改变吗?

    我经常想将一些小的编码风格更改提交到源代码管理 但现在更改日志充满了那些不影响代码功能的更改 下次我必须修复一些小问题时该怎么办 例如 删除和排序 using 在 NET 中 在 Python 中导入 在 C 中包含 正确的缩进 间距和换行
  • 是否可以在C++中实现无锁映射

    我们正在开发一个基于C S的网络应用程序 我们发现std map添加了太多的锁 导致服务器的性能变差 我想知道是否可以实现无锁映射 如果可以 如何实现 那里有开源代码吗 编辑 实际上我们使用std map来存储socket信息 我们根据so