gpt4 book ai didi

c++ - 以原子方式访问存储在 map 中的资源

转载 作者:行者123 更新时间:2023-11-30 02:00:30 28 4
gpt4 key购买 nike

我想将一些 std::shared_ptr 存储到映射中的 C++ 类实例,例如std::map,使用整数键。但是,我需要这张 map 有两个属性:

  1. 如果键不存在,则返回一个错误而不是创建一个新对象。
  2. 如果 key 确实存在,则自动获取 std::shared_ptr 的拷贝。 IE。不可能在一个线程中从 map 中删除一个对象,同时在另一个线程中从 map 中检索它。

如果可能的话,我希望避免使用单个互斥锁(甚至是多次读取、一次写入)来从 map 中获取和删除对象,以避免开销。

这样的 map 类存在于任何库中吗?如果没有,您能否建议如何实现?

最佳答案

如果集合中的元素具有互斥量,您可以简单地使用无锁数据结构。在 boost 1.53.0 中用 C++ 实现.

不过,我建议再看看互斥量——在许多情况下,它们会提供更好的无锁数据结构性能(尽管并非总是如此)并且更易于管理。只要没有互斥锁循环,就没问题。

从不创建访问开始使用std::map::find如果您使用 C++03(返回迭代器)或 std::map::at如果您使用 C++11(返回引用)。

编辑:实际上std::map::at可能更糟,除非您假设正常情况是该元素存在(即违反规则仅将异常用于异常状态而不是正常操作)。然而,它可能还取决于适用于异常(exception)情况的哲学。

关于c++ - 以原子方式访问存储在 map 中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15065543/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com