Потокобезопасные чтение/запись в карту map

Рейтинг: 0Ответов: 0Опубликовано: 02.03.2025

Использую карту пар 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;
}

Проблема возникла при многопоточном использовании карты, когда одновременно происходит запись и чтение. Необходимо реализовать потокобезопасные чтение и запись. Посоветуйте пожалуйста варианты использования карты.

Ответы

Ответов пока нет.