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

У меня есть std :: map, который я использую для сопоставления значений (идентификатор поля 's) в читаемую человеком строку. Эта карта инициализируется один раз, когда моя программа запускается до запуска любых других потоков, и после этого она никогда не изменяется снова. Прямо сейчас я даю каждому потоку свою копию этой (довольно большой) карты, но это явно неэффективное использование памяти и замедляет запуск программы. Так что я думал дать каждому потоку указатель на карту, но это поднимает проблему безопасности потока.

Если все яя делаю это чтение с карты, используя следующий код:

std::string name;
//here N is the field id for which I want the human readable name
unsigned field_id = N; 
std::map::const_iterator map_it;

// fields_p is a const std::map* to the map concerned.
// multiple threads will share this.
map_it = fields_p->find(field_id);
if (map_it != fields_p->end())
{
    name = map_it->second;
}
else
{
    name = "";
}

Будет ли это работать или есть проблемы с чтением std :: map из нескольких потоков?

Примечание: яЯ работаю с Visual Studio 2008 в настоящее время, но яМне бы хотелось, чтобы это работало в большинстве основных реализаций STL.

Обновление: отредактированный пример кода для правильности.

Ответы на вопрос(3)

Ваш ответ на вопрос