Потокобезопасные чтение/запись в карту map
Использую карту пар HDC
и HWND
для нахождения окна, которому принадлежит контекст устройства.
using WndList = std::map<HDC, HWND>;
WndList DataWndList;
typedef std::pair <HDC, HWND> In_Pair;
// запись
DataWndList.insert(In_Pair(hdc, hWnd));
// чтение
HWND HwndFrom = DataWndList[hdc];
// удаление ключей по соответствию параметра
template <typename K, typename V>
int erase_Value(std::map<K, V>& elementmap, V given_value)
{
int number_ofDeletedElements = 0;
auto itr = elementmap.begin();
//Перемещение по карте
while (itr != elementmap.end()) {
//проверка соответствия значения заданному значению
if (itr->second == given_value) {
number_ofDeletedElements++;
//Стираем элемент
itr = elementmap.erase(itr);
}
else {
//Увеличение итератора
itr++;
}
}
//возвращает количество удаленных элементов
return number_ofDeletedElements;
}
// очистка неактуальных ключей
int clear_Map()
{
int number_ofDeletedElements = 0;
auto itr = DataWndList.begin();
while (itr != DataWndList.end()) {
if (!GetObjectType(itr->first)) {
number_ofDeletedElements++;
itr = DataWndList.erase(itr);
}
else {
itr++;
}
}
return number_ofDeletedElements;
}
Проблема возникла при многопоточном использовании карты, когда одновременно происходит запись и чтение. Необходимо реализовать потокобезопасные чтение и запись. Посоветуйте пожалуйста варианты использования карты.
Источник: Stack Overflow на русском