Ich habe eine relativ teure Daten holen Operation, die ich die Ergebnisse von cachen wollen. Dieser Vorgang wird von const
Methoden aufgerufen, in etwa wie folgt aus:Caching teure Daten in C++ - Funktionsbereich Statik vs veränderbare Member-Variablen
double AdjustData(double d, int key) const {
double factor = LongRunningOperationToFetchFactor(key);
return factor * d;
}
I AdjustData
const
bleiben möchte, aber ich möchte den Faktor zwischenzuspeichern, so das erste Mal hole ich es nur. Zur Zeit verwende ich eine mutable map<int, double>
, um das Ergebnis zu speichern (die Karte ist von key
bis factor
), aber ich denke, mit einem Funktionsumfang statisch könnte eine bessere Lösung sein - dieser Faktor wird nur von dieser Funktion benötigt, und ist irrelevant für den Rest der Klasse.
Scheint das ein guter Weg zu gehen? Gibt es bessere Möglichkeiten? Was soll ich denken, besonders im Hinblick auf die Fadensicherheit?
Danke,
Dom
Es ist möglicherweise nicht notwendig, den lang andauernden Vorgang zu sperren, sondern nur Anrufe in der Karte zu suchen/einzufügen. –
Ich denke du hast Recht. Lass es mich weiter tunen. –
Das Erstellen der statischen Zuordnung, während keine Sperre gespeichert wird, ist nicht garantiert threadsicher, da Sie die Zuordnung möglicherweise doppelkonstruieren und doppelzerstören, wenn zwei Threads diese Funktion bei der ersten Verwendung gleichzeitig aufrufen. Siehe http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx – bk1e