对于windows和linux:
在多线程应用程序中,如果我不太关心获取hash_map的计数,那么我是否可以安全地调用{hash_map} .size(),同时仍然允许其他线程添加/删除该项目{的hash_map}?
谢谢。
答案 0 :(得分:3)
否强>
STL容器(如果你正在使用它)不是线程安全的。
size()很可能会走遍水桶并计算数字。在另一个线程走过它时修改该数据结构是危险的(也就是说,像雷区中的醉大象一样危险)。
我建议将hash_map包含一些单独更新计数的函数,作为原子整数。该值不准确,但可能足够接近,它将减少size()和插入/擦除操作之间的线程争用。
答案 1 :(得分:3)
这很大程度上取决于hash_map的类型。如果它是std::unordered_map
,那么答案是 NO ---如果其中任何一个是非const
成员函数,则不允许从单独的线程并发调用成员函数。
另一方面,如果您使用的是为并发访问而设计的类型,那么答案很可能是肯定的。