我需要创建一个线程安全的映射,我的意思是每个值必须独立地互斥.例如,我需要能够得到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)
我该如何解决这个问题?