使用map时,我们C++需要互斥锁
C++ do we need mutex when using map?
>我有两个线程,一个正在插入,另一个正在删除映射中的条目。我想知道我是否在这些函数调用周围有互斥锁?还有一个线程递增此映射中的计数器,另一个线程递减该计数器。我也需要互斥锁吗?
谢谢
对映射本身的更改(插入、删除)需要同步。遍历和查找也是如此(即 begin()
、find()
、[]
等)。
但是,多个线程可以安全地访问不同的元素。
如果你在map
中递增和递减 SAME 元素(或者可能是同一个元素,你不能肯定地说),那么你需要有某种同步。您可以使用std::atomic<int>
来避免使用mutex
。
树中的任何插入或删除都需要用mutex
或类似方式进行保护 - 当然,这也意味着对树内容的任何访问都需要以相同的方式进行保护,因此如果您使用std::map<T>::iterator
(至少对于树中的erase
)将失效。因此,您确实需要确保在使用对树的任何其他访问时不会发生erase
。这包括"现成"功能,例如 find
.
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射