对于windows和linux:
在多线程应用程序中,如果我不太关心何时获取hash_map的计数,那么我可以安全地调用{hash_map}.size(),同时仍然允许其他线程在该{hash_map}上添加/删除项吗?
谢谢。
发布于 2011-06-28 18:04:46
没有
STL容器(如果您使用的是STL容器)不是线程安全的。
size()很可能遍历存储桶并计算数字。当另一个线程遍历该数据结构时,修改该数据结构是危险的(也就是说,就像雷区中一头喝醉了的大象一样危险)。
我建议用一些单独更新计数的函数包装您的hash_map,作为一个原子整数。该值并不准确,但可能足够接近,并且它将减少size()和插入/擦除操作之间的线程争用。
发布于 2011-06-28 18:04:59
这很大程度上取决于您的hash_map的类型。如果为std::unordered_map,则答案是NO -如果其中任何一个是非const成员函数,则不允许从单独的线程并发调用成员函数。
另一方面,如果您使用的是为并发访问而设计的类型,那么答案很可能是肯定的。
https://stackoverflow.com/questions/6504730
复制相似问题