首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在添加一些项目的同时从hash_map中获取计数吗?

问我可以在添加一些项目的同时从hash_map中获取计数吗?
EN

Stack Overflow用户
提问于 2011-06-28 18:00:35
回答 2查看 408关注 0票数 2

对于windows和linux:

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-28 18:04:46

没有

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2011-06-28 18:04:59

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6504730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档