unordered_map线程安全

2024-04-14

我正在使用 boost:thread 库将单线程程序更改为多线程程序。该程序使用 unordered_map 作为 hasp_map 进行查找。我的问题是..

某一时刻,许多线程将进行写入,而另一时刻,许多线程将进行读取,但不会同时进行读取和写入,即,要么所有线程都在读取,要么全部线程都在写入。这将是线程安全的以及为此设计的容器吗?如果是的话,它真的会并发并提高性能吗?我需要使用某种锁定机制吗?

我在某处读到 C++ 标准说行为将是未定义的,但这就是全部吗?

更新:我也在考虑英特尔并发哈希映射。这会是一个好的选择吗?


STL 容器的设计保证您能够:

A.多线程同时读取

or

B. 一个线程同时写入

多线程写入不是上述条件之一,也是不允许的。因此,多线程写入将产生数据竞争,这是未定义的行为。

您可以使用互斥体来解决此问题。共享互斥体(与共享锁结合)将特别有用,因为该类型的互斥体允许多个并发读取器。

http://eel.is/c++draft/res.on.data.races#3 http://eel.is/c++draft/res.on.data.races#3是标准的一部分,保证在不同线程上同时使用 const 函数的能力。http://eel.is/c++draft/container.requirements.dataraces http://eel.is/c++draft/container.requirements.dataraces指定一些在不同线程上安全的附加非常量操作。

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

unordered_map线程安全 的相关文章

随机推荐

  • 无法将证书添加到 alpine linux 容器

    我在 alpine linux 容器内有一个小型 python 应用程序 这是 dockerfile FROM alpine basic flask environment RUN apk add no cache bash git ngi
  • Scala 从另一个类获取局部变量

    早上好 我有一个名为 Application 的类 它有一个不能更改的 def 并返回一个 int 在它内部我定义了一个局部变量的路径 从另一个名为 App 的类扩展到 Application 类 我怎样才能得到那个变量是局部的吗 我尝试在
  • modprobe:错误:无法插入“v4l2loopback”:模块中的未知符号或未知参数(请参阅 dmesg)

    我正在尝试在 AWS EC2 实例上设置虚拟 v4l2 设备 我做了 apt installv4l2loopback dkms and v4l2loopback utils 当我尝试使用以下命令设置设备时出现以下错误 sudo modpro
  • Android:9 块重复模式而不是拉伸

    我有一个 9 补丁图像文件 如下所示 当我使用它时 它看起来像这样 我真正想要实现的是中心的完整点repeated代替拉伸的 我希望这是可能的 我认为使用 9 Patch 制作重复图案是不可能的 仅拉伸某些区域 也许你可以在官方中找到更多相
  • 数据标注MVC3

    是否可以使用 DataAnnotations 来限制用户输入特殊字符 我希望用户仅在文本框中输入 A Z a z 和 0 9 我需要在客户端执行此操作 您可以尝试使用 RegularExpression http msdn microsof
  • “数字值''无法识别” - 哪一列?

    我正在尝试将数据从临时表插入到主表中 该表有近 300 列 混合了 Varchars Integers Decimals Dates 等数据类型 Snowflake 给出了无用的错误消息 无法识别数值 我已经仔细检查并删除了查询的各个部分
  • 将列表转换为每两个元素的元组列表[重复]

    这个问题在这里已经有答案了 如何将列表转换为元组列表 元组由列表的偶数和奇数索引处的元素组成 例如 我有一个列表 0 1 2 3 4 5 并需要转换为 0 1 2 3 4 5 我能想到的一种方法如下 l range 5 out it ite
  • 目标必须是节点索引的密集双精度数组。怎么解决?

    我正在尝试构建一个网络图词邻接 http www personal umich edu mejn netdata 数据 但我收到错误 目标必须是节点索引的密集双数组 以下是我的代码 fileName adjnoun gml inputfil
  • Bootstrap 3.0 内联标题标签

    我有以下代码 div class row div class col md 12 div class well div class clearfix h2 class pull left Heading h2 h4 Second Headi
  • Dart 导入包不起作用

    现在在 Dart 中导入包时遇到问题 该项目昨天还在工作 但今天停止了 我不知道为什么 代码整个周末都没有改变 我不记得运行过任何更新 任何带有 package url 的内容都存在问题 例如 这两个在我的项目中都被破坏了 import p
  • java中2的十六进制数到十进制的补码

    我有一个表示 2 的补码数的十六进制字符串 有没有一种简单的方法 库 函数 可以将十六进制转换为十进制而不直接使用其位 例如 这是左边十六进制的预期输出 0000 gt 0 7FFF gt 32767 max positive number
  • 如何在 GitHub Actions 工作流程中获取拉取请求编号

    我想访问 Github Actions 工作流程中的 Pull Request 编号 我可以访问GITHUB REF可用的环境变量 尽管在拉取请求操作中它具有以下值 refs pull 125 merge 我只需要提取125 我发现了一个类
  • 警告:来自 public void org.omnifaces.cdi.eager.EagerBeansRepository.setXxx 的 List> 类型的参数 1 无法解析为具体类型

    我正在使用 Omnifaces 1 8 1 每当我将应用程序部署到 Glassfish 时 我都会收到以下警告 这会导致部署过程出现一些延迟 Warning WELD 001519 An InjectionTarget implementa
  • 之间的区别?

    你能解释一下两者之间的区别吗
  • PHP - 完整的 url 解析器帮助

    我一直在试图找到一个有效的url解析器 php自己的不包含子域或扩展名 在 php net 上 许多用户做出了贡献并做出了以下贡献 function parseUrl url r P
  • 如何覆盖Android Gradle库项目的artifactId?

    我使用 Android Studio 创建了一个 Android 库项目 目录结构如下 build gradle gradle gradle properties gradlew gradlew bat local properties s
  • Xcode 7 GM 缺少 iOS 7 模拟器

    我已将 Xcode 7 beta 版本升级到 Xcode 7 GM 但缺少 iOS 7 1 模拟器 我仍然有 Xcode 6 并且可以在那里使用 7 1 模拟器 我试着看一下Preferences gt Downloads但只有 8 x 模
  • 删除多列后单元格宽度相等

    更新 这里是colspans 的后续问题 https stackoverflow com questions 9126565 colspan equal cell width after multiple columns are remov
  • 安卓和ICU 5.0

    我开始在我的 Android 项目中使用 ICU4J 但是当我在设备上运行该项目时 在启动时 我发生了崩溃 这是错误 FATAL EXCEPTION main java lang ExceptionInInitializerError at
  • unordered_map线程安全

    我正在使用 boost thread 库将单线程程序更改为多线程程序 该程序使用 unordered map 作为 hasp map 进行查找 我的问题是 某一时刻 许多线程将进行写入 而另一时刻 许多线程将进行读取 但不会同时进行读取和写