Seguridad de subprocesos de std :: map para operaciones de solo lectura

Tengo un std :: map que uso para asignar valores (ID de campo) a una cadena legible. Este mapa se inicializa una vez cuando mi programa se inicia antes de que se inicie cualquier otro subproceso, y después de eso nunca más se modifica. En este momento, le doy a cada subproceso su propia copia de este mapa (bastante grande) pero este es obviamente un uso ineficiente de la memoria y retrasa el inicio del programa. Así que estaba pensando en darle a cada hilo un puntero al mapa, pero eso plantea un problema de seguridad del hilo.

Si todo lo que estoy haciendo es leer el mapa usando el siguiente 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 = "";
}

¿Funcionará o hay problemas con la lectura de un std :: map desde múltiples hilos?

Nota: Actualmente estoy trabajando con Visual Studio 2008, pero me gustaría que esto funcione en la mayoría de las implementaciones principales de STL.

Actualización: Ejemplo de código editado para corrección de const.

Respuestas a la pregunta(3)

Su respuesta a la pregunta