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.