У меня есть парализованный цикл и доступ для записи в std::map
, Я хотел бы одновременно использовать разные части карты, т. Е. Я хочу получить доступ к map [a] и map [b] для a, b по-разному. Когда я узнал, что это невозможно, мне интересно, однако, есть ли хорошая альтернатива или как этого добиться другим способом!
Я могу ошибаться, но я считаю, что изменение существующих элементов на карте безопасно, если вы не касаетесь одних и тех же элементов (поскольку это не изменяет основную структуру карты). Так что, если вы вставите map[a]
а также map[b]
заранее ваши отдельные потоки должны иметь возможность изменять эти существующие элементы.
Тем не менее, возможно, будет чище и безопаснее просто использовать обычные методы синхронизации, такие как мьютексы, для защиты доступа к карте.
Вполне возможно мутировать map[a]
а также map[b]
отдельно, пока вы не мутируете подчиненного map
,
Если вы хотите изменить ассоциативный контейнер одновременно, проверьте concurrent_unordered_map
из PPL или TBB.
Если возможно, вы можете попробовать предоставить каждому работнику свою собственную копию карты, а затем объединить результаты. Таким образом, блокировка вообще не понадобится.