在并發環境下使用std::map::find
需要注意以下幾點:
std::map
的訪問。在執行map.find
之前,需要先鎖住互斥鎖,在執行完畢后解鎖。std::map<int, int> myMap;
std::mutex myMutex;
// 線程1
myMutex.lock();
auto it = myMap.find(1);
if (it != myMap.end()) {
// do something
}
myMutex.unlock();
// 線程2
myMutex.lock();
auto it = myMap.find(2);
if (it != myMap.end()) {
// do something
}
myMutex.unlock();
std::shared_lock
(C++17及以上):如果使用C++17及以上的標準,可以使用std::shared_lock
來實現讀寫鎖,允許多個線程同時讀取std::map
。std::map<int, int> myMap;
std::shared_mutex myMutex;
// 線程1
std::shared_lock<std::shared_mutex> lock(myMutex);
auto it = myMap.find(1);
if (it != myMap.end()) {
// do something
}
// 線程2
std::shared_lock<std::shared_mutex> lock(myMutex);
auto it = myMap.find(2);
if (it != myMap.end()) {
// do something
}
在并發環境下,一定要確保對共享資源的訪問是線程安全的,否則會導致數據競爭和不確定的行為。