потокобезопасная альтернатива для std :: map?

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

1

Решение

Я могу ошибаться, но я считаю, что изменение существующих элементов на карте безопасно, если вы не касаетесь одних и тех же элементов (поскольку это не изменяет основную структуру карты). Так что, если вы вставите map[a] а также map[b] заранее ваши отдельные потоки должны иметь возможность изменять эти существующие элементы.

Тем не менее, возможно, будет чище и безопаснее просто использовать обычные методы синхронизации, такие как мьютексы, для защиты доступа к карте.

1

Другие решения

Вполне возможно мутировать map[a] а также map[b] отдельно, пока вы не мутируете подчиненного map,

Если вы хотите изменить ассоциативный контейнер одновременно, проверьте concurrent_unordered_map из PPL или TBB.

0

Если возможно, вы можете попробовать предоставить каждому работнику свою собственную копию карты, а затем объединить результаты. Таким образом, блокировка вообще не понадобится.

0
По вопросам рекламы [email protected]