c++ - 在向 hash_map 添加一些项目时,我可以从 hash_map 中获取计数吗?

标签 c++ multithreading hashmap

对于 Windows 和 Linux:

在多线程应用程序中,如果我在获取 hash_map 的计数时不太关心,那么我可以安全地调用 {hash_map}.size() 同时仍然允许其他线程添加/删除该上的项目{hash_map}?

谢谢。

最佳答案

STL 容器(如果您正在使用该容器)不是线程安全的。

size() 可能会遍历桶并计算数字。在另一个线程遍历该数据结构时修改该数据结构是危险的(也就是说,就像雷区中醉酒的大象一样危险)。

我建议使用一些单独更新计数的函数来包装您的 hash_map,作为原子整数。该值并不准确,但可能足够接近,并且它将减少 size() 和插入/删除操作之间的线程争用。

关于c++ - 在向 hash_map 添加一些项目时,我可以从 hash_map 中获取计数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6504730/

相关文章:

c++ - 使用 CMake find_package() 时无法打开源文件 "GL/glew.h"

c++ - 在 c++ 对象包装器中安全包含 C 代码

c++ - 在 VS 2005 中构建 RAPI.h,打开包含文件失败

java - @Autowired 和线程的陷阱

java - 通过 GSON 序列化 ArrayList <HashMap>

java - 使用干净的代码基于 "template" HashMap 动态创建 HashMap

c++ - 我在 C++11 中从未见过的代码

c# - 在 UI 线程上使用 await 是否与阻塞调用相同?

java - 为什么要在ActiveMQ中嵌入线程?

c++ - boost::unordered_map -- 需要指定自定义哈希函数来散列 std::set<int> 吗?