如何在 C++14 中实现读取器/写入器锁

2023-12-07

我有一个哈希表数据结构,我希望通过使用读取器/写入器锁来使其线程安全(我的读取:写入比率可能在 100:1 左右)。

我一直在寻找如何使用 C++11 实现这个锁(比如这里的方法),但我注意到应该可以使用 C++14shared_lock完成同样的事情。然而看完之后参考参数我都找到了std::shared_lock and std::unique_lock但我不明白如何一起使用它们(与 Boost 方式相比有简单的方法调用用于唯一锁定和共享模式锁定)。

如何仅使用标准库在 C++14 中重新创建这个相对简单的读取器/写入器锁接口?


C++14有读/写锁实现std::shared_timed_mutex.

旁注:C++17 添加了更简单的类std::shared_mutex,如果您不需要额外的计时功能(例如shared_timed_mutex::try_lock_for and shared_timed_mutex::try_lock_until).

但是,在使用读/写锁之前,请注意潜在的有害性能影响。根据具体情况,简单std::mutex可能会更快。

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

如何在 C++14 中实现读取器/写入器锁 的相关文章

随机推荐

  • 忽略 py2exe 中的library.zip

    我需要一个可执行文件 exe 它从文件中获取一些参数 用户可以根据他 她的需要配置这些参数 由于我在 python 中创建了脚本 因此我使用 py2exe 来创建该可执行文件 虽然我可以放置一个名为的可配置文件设置 dat作为数据文件并用它
  • 如何将 jackson objectmapper dateformat 配置添加到 spring mvc 配置中?

    我有一个关于 Jackson 2 1 的问题 我的 pojo 有一些日期属性 我想将其转换为字符串 我将其解决在 spring servlet xml 中 但它没有用 我不喜欢使用 JsonSerialize using JsonDateS
  • Android:从特定电话号码接收短信

    我的应用程序是否可以从特定电话号码接收短信 而不让它触发系统通知 但让所有其他消息传递到默认短信应用程序进行正常处理 如果是这样 系统如何知道哪个进程首先进入队列来选择接收哪些消息 我没有尝试这个 但理论上它应该有效 在 Android 中
  • 如何从 Java 中的 JSON 字符串中删除元素?

    我有一个 json 作为字符串 我需要使用 java 代码从中删除一个元素 感谢你的帮助 Example 尝试了数组和其他东西 但没有运气 输入 需要删除图像 widget debug on window title Sample Konf
  • 复制 java.util.Random 类型的实例变量以创建相同状态的对象

    我正在实施一个模拟退火 SA 算法 我需要复制状态 例如记住迄今为止的最佳解决方案 我实现了一个复制方法 因为不鼓励使用java的clone SA 是一种启发式算法 因此下一步要采取的步骤是随机确定的 这是通过使用Random对象 我也想复
  • 如何在 Windows 10 上使用 IPC::Run 捕获超时异常?

    我正在尝试捕获超时异常IPC Run在 Windows 10 上 使用 Strawberry Perl 版本 5 30 1 use strict use warnings use feature qw say use Data Dumper
  • 最小化工作簿/工作表但保持表单打开

    有没有办法最小化工作簿 工作表但能够保持表单打开 我已经尝试过代码 application visible false and userform1 show vbmodeless 但这会隐藏所有活动的工作簿 并且工具栏功能区也会消失 有没有
  • 获取属于个人 Triadic Census 类别的 Triad 节点列表

    通过执行 Networkx triadic census 算法 我可以获得每种类型的三元普查中节点数量的字典 triad census social nx triadic census social graph to directed 现在
  • 虚函数 C#

    我明白什么是虚函数 但我不明白的是他们内部是如何工作的 class Animal virtual string Eat return Eat undefined class Human Animal override string Eat
  • PDFTK 并删除 XFA 格式

    从 PDF 表单中删除 XFA 格式是否会出现任何问题 我正在使用 PDFTK 来填写表单 发现如果表单是 XFA 则 PDFTK 不起作用 除非我先执行 drop xfa 命令来创建新的模板表单 我注意到的一件事是 如果我不执行 drop
  • 是否可以从 .NET Framework 项目引用 .NET 5 项目?

    我有一些相当大的 NET Framework 应用程序想要升级到 NET 5 但一次性升级它们会很麻烦 我正在考虑逐步做到这一点 从应用程序中最 核心 的项目开始 然后从那里开始工作 但这似乎不起作用 当我尝试从 NET Framework
  • 根据组计算存在/缺席情况

    我有一个数据框 其中包含两个位置的许多物种的丰度数据 sp1 sp2 sp3 sp4 SiteA 0 12 0 0 SiteA 0 3 0 0 SiteA 1 0 0 0 SiteB 0 0 6 0 SiteB 2 1 1 0 SiteB
  • 如何使用信号将 python 字典发送到 QML 接口?

    我想发送字典 其中包含动态创建 qml 对象所需的数据 从 PySide2 类发送到 QML 接口 并且由于我需要响应某些事件来执行此操作 因此我需要使用信号和槽 由于我刚刚开始使用 QML 和 python 我尝试创建一个简单的项目只是为
  • 浏览器同步无头环境错误

    所以我刚刚开始学习 Angular 2 并运行之后npm installgit bash 上的命令并打开我的文本编辑器 我试图运行npm start命令启动 typescript 和 lite 服务器 一切都很顺利 直到出现这个错误 1 B
  • Scala/Slick 普通 SQL:以映射形式检索结果

    我有一个简单的方法可以使用 Sclick 纯 SQL 方法从数据库检索用户 object Data implicit val getListStringResult GetResult List String prs gt 1 to prs
  • 如何等待后台工作者完成处理?

    我有 3 个后台工作人员 每个工作人员处理 24 位位图图像的一个通道 Y Cb Cr 每个 8 位图像的处理需要几秒钟 并且可能不会同时完成 完成后我想将通道合并回一张图像 当单击按钮时 每个backgroundWorkerN RunWo
  • PHP嵌入html图像作为链接

    如何在 php 中使用图像作为链接 我从来没有将两个 html 元素放在一个 echo 中 所以这对我来说有点新鲜 这是我的代码 htmltest php 这是我的代码 我收到以
  • iPhone - 将 mp3 转换为 wav?

    有没有办法可以在我的 iPhone 应用程序中将 mp3 文件转换为 wav aiff 文件 我有一个 mp3 但我想将它与其他文件合并 而我知道可以做到这一点的唯一方法是使用 PCM 格式 有人可以帮我从这里出去吗 Thanks 我尝试过
  • C90:如何在没有 C99 扩展的情况下在 C 中全局初始化此结构

    我想知道使用 C90 初始化该结构的最佳方法是什么 同时仍然保持整洁 在我的头文件中 将其称为 test h 我定义了以下结构 struct s test cfg char a 3 char b 3 char c 3 然后我将其声明为 ex
  • 如何在 C++14 中实现读取器/写入器锁

    我有一个哈希表数据结构 我希望通过使用读取器 写入器锁来使其线程安全 我的读取 写入比率可能在 100 1 左右 我一直在寻找如何使用 C 11 实现这个锁 比如这里的方法 但我注意到应该可以使用 C 14shared lock完成同样的事