Tengo una operación de búsqueda de datos relativamente cara en la que quiero guardar los resultados. Esta operación se llama desde const
métodos, más o menos así:Almacenamiento en caché de datos costosos en C++: estadísticas estáticas con función variable vs variables de miembros mutables
double AdjustData(double d, int key) const {
double factor = LongRunningOperationToFetchFactor(key);
return factor * d;
}
me gustaría seguir siendo AdjustData
const
, pero yo quiero para almacenar en caché a cabo el factor por lo que sólo lo trae por primera vez. En este momento estoy usando un mutable map<int, double>
para almacenar el resultado (el mapa es de key
a factor
), pero estoy pensando que usar una estática de ámbito funcional podría ser una mejor solución; este factor solo es necesario para esta función, y es irrelevante para el resto de la clase.
¿Le parece una buena forma de hacerlo? ¿Hay mejores opciones? En qué cosas podría pensar, particularmente con respecto a la seguridad de hilos.
Gracias,
Dom
Puede que no sea necesario bloquear la operación de larga ejecución, solo busque/inserte llamadas en el mapa. –
Creo que tienes razón. Déjame afinarlo más. –
No se garantiza la seguridad de la ejecución de subprocesos al crear un mapa estático, ya que puede duplicar y duplicar el mapa si dos subprocesos llaman a esta función simultáneamente la primera vez que se utiliza. Ver http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx – bk1e