का नक्शा मुझे थ्रेड-सुरक्षित नक्शा बनाने की ज़रूरत है, जहां मेरा मतलब है कि प्रत्येक मान को स्वतंत्र रूप से म्यूटेक्स किया जाना चाहिए। उदाहरण के लिए, मुझे 2 अलग-अलग धागे से एक ही समय में map["abc"]
और map["vf"]
प्राप्त करने में सक्षम होना चाहिए। डेटा के लिए एक और हर कुंजी के लिए म्युटेक्स के लिए एक:म्यूटेक्स सी ++ 11
मेरा विचार दो नक्शे बनाने के लिए है
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();
}
मुझे लगता है कि मैं नहीं नक्शा स्ट्रिंग से म्युटेक्स को, बना सकते हैं कोई नकल निर्माता है, क्योंकि 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>);
^
मैं इस समस्या को कैसे हल करूं?
+1 'std :: make_unique' –
FWIW के लिए, आप 'का उपयोग करना चाहिए सी ++ 11 भी में make_unique'। –