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

时间:2011-06-28 10:00:35

标签: c++ multithreading hashmap

对于windows和linux:

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

谢谢。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

这很大程度上取决于hash_map的类型。如果它是std::unordered_map,那么答案是 NO ---如果其中任何一个是非const成员函数,则不允许从单独的线程并发调用成员函数。

另一方面,如果您使用的是为并发访问而设计的类型,那么答案很可能是肯定的。