Thread-Sicherheit von std :: map für schreibgeschützte Operationen

Habe ich eine std::map, die ich verwenden, um die anzeigen-Werte (Feld ID) in eine lesbare Zeichenfolge. Diese Karte ist initialisiert, sobald, wenn mein Programm gestartet wird, bevor alle anderen threads werden gestartet, und nach, dass es nie wieder geändert. Jetzt gebe ich jeder thread seine eigene Kopie dieser (relativ große) map aber das ist offensichtlich ineffiziente Nutzung von Speicher und verlangsamt den Programmstart. Also dachte ich mir, jedem thread einen Zeiger auf die Karte, aber das wirft eine thread-Frage der Sicherheit.

Wenn alles, was ich Tue, ist das Lesen von der Karte mit dem folgenden code:

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 = "";
}

Wird das funktionieren oder gibt es da Probleme mit dem Lesen einer std::map aus mehreren threads?

Hinweis: ich arbeite mit visual studio 2008 aktuell, aber ich möchte diese Arbeit acros wichtigste STL-Implementierungen.

Update: Bearbeitet-code-Beispiel für const-Korrektheit.

InformationsquelleAutor der Frage jilles de wit | 2009-12-04

Schreibe einen Kommentar