c++ - unordered_map 可以同时查找和插入吗?
问题描述
我是 C++ 多线程编程的新手。我从网上阅读了一些文档和一些文章,并注意到在 STL unordered_map 中允许同时进行多次查找操作,而不允许进行多次插入操作。
我有两个问题:
可以同时进行查找操作和插入操作吗?例如,
std::string x = "jim"; std::string y = "marry"; std::unordered_map<std::string, int> map; // Thead A executes below code auto iterator = map.find(x); // Thread B executes below code map.insert(std::make_pair(y, "value"));
请注意这里 x 和 y不一样。
如果 x 和 y 相同怎么办?如果我们找到密钥并同时插入相同的密钥会发生什么?
谢谢大家,如果你用你获得这些知识的参考来回答这个问题。
解决方案
两者的答案:由于 C++ 内存模型的规则,这样的数据竞争会导致未定义的行为。所以任何事情都有可能发生。您必须保证安全操作并应添加 std::mutex 例如(https://en.cppreference.com/w/cpp/thread/mutex)
推荐阅读
- javascript - Javascript基本递归输出返回未定义的答案
- python-3.x - 将lisp命令转换为python中的嵌套列表
- php - 无法安装所需版本的 Laravel
- daml - 从另一个选择中做出选择;自我参照
- python - 熊猫过滤:如果任一语句为真,则选择多列
- c# - 我如何在统一内写数学方程
- python - Python Tkinter Treeview Shift-Up 绑定是输入后面的一次迭代
- php - 如何将项目(主题)集合保存到列表中并保存在数据库中
- android - 如何向其适配器类发送和检索意图数据
- swift - Firestore - 每秒多次写入具有相同 ID 的文档