Я использую boost::unordered_map<const std::string, std::list<TypeA> >
в критической по производительности многопоточной среде. Я понимаю, что запись в контейнеры STL не является потокобезопасной, и то же самое касается boost::unordered_map
.
boost::unordered_map<const std::string, std::list<TypeA> > myMap;
// Added some elements to myMap
Теперь, если я хочу добавить или удалить элемент типа A в список как , необходимо ли просто заблокировать всю карту, а не блокировать изменяемый список, чтобы другие потоки могли читать/записывать остальную часть пары ключ-значение?
// Assuming there are pair with the keys "Apple" and "Orange" in myMap
A a, b;
myMap["Orange"].push_back(a) //Add an element to the list
myMap["Apple"].remove(b); //Remove an element
Что делать, если список заменен другим контейнером STL?
Спасибо.