Segurança de thread de std :: map para operações somente leitura

Eu tenho um std :: map que eu uso para mapear valores (identificações de campo) para uma seqüência de caracteres humana legível. Esse mapa é inicializado uma vez quando meu programa é iniciado antes de qualquer outro encadeamento ser iniciado e, depois disso, nunca é modificado novamente. Agora, eu dou a cada thread sua própria cópia deste (bastante grande) mapa, mas isso é obviamente uso ineficiente da memória e isso atrasa a inicialização do programa. Então eu estava pensando em dar a cada thread um ponteiro para o mapa, mas isso levanta um problema de segurança de thread.

Se tudo que estou fazendo é ler o mapa usando o seguinte código:

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

// fields_p is a const std::map<unsigned, std::string>* 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 = "";
}

Isso funcionará ou haverá problemas com a leitura de um std :: map de vários threads?

Nota: Atualmente, estou trabalhando com o visual studio 2008, mas gostaria de trabalhar com a maioria das implementações principais de STL.

Atualização: Exemplo de código editado para correção de const.

questionAnswers(3)

yourAnswerToTheQuestion