Как сделать словарь объектов синхронизации?

Мне нужно что-то вроде std::map<std::string, CCriticalSection>, но CCriticalSection нельзя копировать. Вместо CCriticalSection я думал, что могу использовать CRICITAL_SECTION, но также невозможно копировать или перемещать объекты этого типа. Поскольку это очень старый проект, я не могу использовать MFC и VC6. Я хотел бы получить доступ к объектам синхронизации следующим образом (следующий код не работает и является просто идеей, как я хотел бы использовать словарь):

// global variable
std::map<std::string, CCriticalSection> csec;

unsigned int somefunc(std::string ip)
{
    CSingleLock lock(&csec[ip], TRUE);
    // do something
}

Итак, мой вопрос: как сделать словарь объектов синхронизации с помощью MFC и VC6?

Спасибо за ваши ответы!


person Christian Ammer    schedule 05.11.2015    source источник


Ответы (1)


Используйте карту указателей на критические секции:

std::map<std::string, CCriticalSection *> csec;

// add
csec["key1"] = new CCriticalSection();

// access
CSingleLock lock(csec[ip], TRUE);

// don't forget to delete after use
for (std::map<std::string, CCriticalSection *>::iterator i = csec.begin();
     i != csec.end(); ++i)
    delete i->second;
person Ilya Popov    schedule 05.11.2015