c++11 std::hash 函数对象类线程安全

2024-02-11

在 c++11 中声明的哈希函数类对象<functional>线程安全?例如,从多个线程调用此函数是否安全?

size_t hash1(const std::string& s) {
    std::hash<std::string> str_hash;
    return str_hash(s); 
}

或者,如果有一个全局对象std::hash<std::string> str_hash_global;,那么从多个线程调用第二个函数是否安全?

size_t hash2(const std::string& s) {
    return str_hash_global(s); 
}

标准库承诺,如果您only call const- 标准库对象上的限定成员函数,标准库代码不会导致数据争用(参见[res.on.data.races])。

标准模板std::hash,以及所有允许的专业化,以及任何用户提供的满足Hash要求([hash.requirements])必须有一个const- 由于要求,需要合格的调用运算符,因此使用库提供的std::hash专业化不应该引起竞争。此外,由于 [namespace.std],程序提供的专业化必须满足相同的要求。

最后,我想您通常会通过递归地调用来使用无竞争保证const调用:如果多个线程同时在映射中查找值,它们必须使用映射的const接口来调用上述库规则,但映射只能使用哈希器的常量值(或私有副本),因此它本身只能执行无竞争的哈希计算。此时是否存在活泼的非常量调用运算符是无关紧要的。

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

c++11 std::hash 函数对象类线程安全 的相关文章

随机推荐

  • 如何在 fastapi 中使用刷新令牌?

    我试图找到一个使用的例子刷新令牌 https auth0 com blog refresh tokens what are they and when to use them 在 fastapi 中 快速APIdocs https fast
  • Java 8 lambda 语法中大括号何时是可选的?

    我意识到 Java 8 lambda 实现可能会发生变化 但在 lambda build b39 中 我发现只有当 lambda 表达式返回非 void 类型时才能省略大括号 例如 这样编译 public class Collections
  • MySQL Workbench 是否自动为外键创建索引?

    当我在 MySQL 工作台中创建外键时 索引 选项卡上会出现一个新条目 其与我刚刚创建的外键完全相同 这实际上是外键 由于某种原因显示在 索引 选项卡上吗 或者 MySQL Workbench 是否会尝试为我提供帮助并为我创建一个索引 知道
  • 在 DOM 元素上创建角度范围

    我需要创建一个新的角度范围并将其附加到 DOM 元素 我正在修改第三方控件 因此我无法选择仅使用指令 我需要做类似的事情 thirdPartyCallbackfunction domElement var myNewScope scope
  • segue完成后如何执行一些代码?

    iOS 6 是否可以知道何时UIStoryboardSegue已经完成转变了吗 就像我添加一个UIStoryboardSegue from UIButton推另一个UIViewController在导航控制器上 我想在推送转换完成后立即执行
  • 当没有文件要处理时,如何防止在SSIS包中导入Excel?

    我有一个导入 Excel 文件的 SSIS 包 在包内 我有一个脚本任务 用于在执行 Excel 导入过程之前检查 Excel 文件是否存在 当 Excel 文件不存在时 我无法执行包 因为AcquireConnection error 当
  • SQL Server 中的用户定义数据类型有多酷? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 SQL Server 中的用户定义数据类型是中级 SQL 用户应该了解和使用的吗 使用 UDT 的优点和缺点是什么 我的建议是永远不要使用它们
  • 为什么 RestKit 改变我的响应内容类型?

    简而言之 我尝试使用以下命令从服务器获取数据content typehttp请求头设置为 text html 但由于某种原因 RestKit 将其更改为application JSON 解释 如果我只使用AF网络 https github
  • 从领域数据库中获取单个列 (Android)

    我是领域的初学者 我有一个包含 3 列的表 其名称为ID 姓名 电子邮件 地址 为了获取 Name 列的数据 我们使用如下查询 从表名中选择名称 对于 SQLite 如果我们在Android中使用Realm 那么我们必须使用哪种方法来只获取
  • jinja2 如何删除尾随换行符

    我正在使用 jinja 2 输出 yaml 文件 但似乎无法摆脱尾随换行符和 for 循环的末尾 例如下面的 request path path headers origin somedomain com user agent agent
  • 解雇ViewController:不工作

    我有一个名为 vc0 的视图控制器 其显示如下 self presentViewController vc1 animated YES completion nil 在 vc1 中 我有一个按钮来呈现另一个视图控制器 self presen
  • 获取 Java 数组部分的视图[重复]

    这个问题在这里已经有答案了 我指的是在Java中只获取数组的一部分 https stackoverflow com questions 11001720 get only part of an array in java 它使用范围复制 方
  • set_time_limit 不起作用

    我有一个bigintphp 中的类 用于计算大数 除了时间限制外 效果很好 我设置了时间限制 set time limit 900 在我的 bigint php 文件中 它在本地主机中工作 但在我的网络主机中 当我尝试计算 999 999
  • Angular 7:如何将文件/图像与我的反应式表单一起提交?

    我创建了带有文本输入的简单反应式表单 当提交表单时 我想传递文件输入中的图像 每次我用谷歌搜索时 我都会得到教程 它们向我展示如何上传文件 但它是在没有其他输入字段的情况下完成的 我知道如何做到这一点 但我不明白如何在一次提交中提交表单和文
  • 带 MonoTouch 的 sizeWithFont

    MonoTouch 中的 sizeWithFont 相当于什么 如果没有这样的方法 是否可以通过其他方式调用它 我想做的就是根据文本调整标签大小 下一个更新 MonoTouch 1 1 将提供 UIView StringSize strin
  • NSURLErrorDomain错误代码1002描述

    我是新来的iOS发展 我正在尝试加载一个JSON 这是我的功能 func loadmyJSON urlPath String let url NSURL NSURL string urlPath let session NSURLSessi
  • 从 SQLite 中的 DATETIME 获取月份

    我正在尝试从 a 中提取月份DATETIMESQLite 中的字段 month dateField 效果不太好strftime m dateStart 有任何想法吗 我不明白 答案就在你的问题中 select strftime m date
  • 如何通过 Websocket 发送文件以及附加信息?

    我正在开发一个 Web 应用程序 用于从管理界面将图像 视频等发送到两个显示器 我在服务器端使用 Node js 中的 ws 我已经实现了选择服务器上可用的图像和外部 URL 并将它们发送到客户端 但我也希望能够通过文件输入直接发送从设备中
  • 单选按钮单击和重新单击

    我在 Android 中有一个单选按钮组 选择项目时我会收到事件 目前为止还正常 但如果用户单击已选择的项目 我不会收到该事件 有没有办法知道 接收事件 用户何时点击单选按钮 无论它是否被选择 多谢 我不明白为什么当单击已选中的单选按钮时会
  • c++11 std::hash 函数对象类线程安全

    在 c 11 中声明的哈希函数类对象