在并发环境下使用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
}
在并发环境下,一定要确保对共享资源的访问是线程安全的,否则会导致数据竞争和不确定的行为。