相关疑难解决方法(0)

互斥锁c ++ 11的地图

我需要创建一个线程安全的映射,我的意思是每个值必须独立地互斥.例如,我需要能够得到map["abc"]map["vf"]在2级不同的线程在同一时间.

我的想法是创建两个映射:一个用于数据,一个用于每个键的互斥:

class cache
{
private:
....

    std::map<std::string, std::string> mainCache;
    std::map<std::string, std::unique_ptr<std::mutex> > mutexCache;
    std::mutex gMutex;
.....
public:
    std::string get(std::string key);

};
std::string cache::get(std::string key){
    std::mutex *m;
    gMutex.lock();
    if (mutexCache.count(key) == 0){
        mutexCache.insert(new std::unique_ptr<std::mutex>);
    }
    m = mutexCache[key];
    gMutex.unlock();
}
Run Code Online (Sandbox Code Playgroud)

我发现我无法创建从字符串到互斥锁的映射,因为没有复制构造函数std::mutex,我必须使用std::unique_ptr; 但是当我编译它时,我得到:

/home/user/test/cache.cpp:7: error: no matching function for call to 'std::map<std::basic_string<char>, std::unique_ptr<std::mutex> >::insert(std::unique_ptr<std::mutex>*)'
         mutexCache.insert(new std::unique_ptr<std::mutex>);
                                                          ^
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

c++ multithreading c++11

7
推荐指数
2
解决办法
5169
查看次数

标签 统计

c++ ×1

c++11 ×1

multithreading ×1