Будет ли это потокобезопасным и предназначен ли контейнер для этого?
Нет, стандартные контейнеры не являются поточно-безопасными.
Нужно ли использовать какой-нибудь механизм блокировки?
Да, вы делаете. Поскольку вы используете boost, boost::mutex
будет хорошей идеей; в C ++ 11 есть std::mutex
.
Я где-то читал, что Стандарт C ++ говорит, что поведение будет неопределенным, но это все?
Действительно, поведение не определено. Я не уверен, что вы подразумеваете под «это все?», Поскольку неопределенное поведение - это наихудший из возможных вариантов поведения, и программа, которая его демонстрирует, по определению неверна. В частности, неправильная синхронизация потоков может привести к случайным сбоям и повреждению данных, часто очень сложными для диагностики способами, поэтому было бы разумно избежать этого любой ценой.
ОБНОВЛЕНИЕ: я также думал о Intel concurrent_hash_map. Это будет хороший вариант?
Звучит хорошо, но я никогда не использовал его сам, поэтому не могу высказать свое мнение.