首页 > 解决方案 > unordered_map 可以同时查找和插入吗?

问题描述

我是 C++ 多线程编程的新手。我从网上阅读了一些文档和一些文章,并注意到在 STL unordered_map 中允许同时进行多次查找操作,而不允许进行多次插入操作。

我有两个问题:

  1. 可以同时进行查找操作和插入操作吗?例如,

    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不一样。

  2. 如果 x 和 y 相同怎么办?如果我们找到密钥并同时插入相同的密钥会发生什么?

谢谢大家,如果你用你获得这些知识的参考来回答这个问题。

标签: c++multithreadingstlunordered-map

解决方案


两者的答案:由于 C++ 内存模型的规则,这样的数据竞争会导致未定义的行为。所以任何事情都有可能发生。您必须保证安全操作并应添加 std::mutex 例如(https://en.cppreference.com/w/cpp/thread/mutex


推荐阅读