LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

У мапы есть свой mutex. Блокируешь мапу, находишь/создаёшь объект, блокируешь уже его персональный мьютекс, разблокируешь мапу и работаешь уже только с самим объектом. Таким образом разные потоки могут одновременно обрабатывать разные объекты хранящиеся в одной мапе. Кстати, самой мапе можно shared_mutex, тогда операция поиска тоже будет конкурентной (только для вставки и удаления придётся захватывать мапу монопольно, а для удаления ещё и персональный mutex удаляемого объекта).

Специфика unordered_map такова, что ссылки и указатели на элементы не инвалидируются при её модификации (кроме единственной операции удаления элемента).

Исходная версия KivApple, :

У мапы есть свой mutex. Блокируешь мапу, находишь/создаёшь объект, блокируешь уже его персональный мьютекс, разблокируешь мапу и работаешь уже только с самим объектом. Таким образом разные потоки могут одновременно обрабатывать разные объекты хранящиеся в одной мапе. Кстати, самой мапе можно shared_mutex, тогда операция поиска тоже будет конкурентной (только для вставки и удаления придётся захватывать мапу монопольно, а для удаления ещё и персональный mutex удаляемого объекта).