对于 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/