потокобезопасная альтернатива для 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
Похожие вопросы
Добавить ответ
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Нажимая кнопку «Отправить», я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности этого сайта.