У меня относительно дорогостоящая операция извлечения данных, которую я хочу кэшировать. Эта операция вызывается из const
методов, примерно так:Кэширование дорогостоящих данных на C++ - статическая статистика с функциями с изменяемыми переменными-членами
double AdjustData(double d, int key) const {
double factor = LongRunningOperationToFetchFactor(key);
return factor * d;
}
Я хотел бы остаться AdjustData
const
, но я хочу, чтобы кэшировать из фактора, так что я только принести его в первый раз. В настоящее время я использую mutable map<int, double>
, чтобы сохранить результат (карта от key
до factor
), но я думаю, что использование статического элемента с функциональными возможностями может быть лучшим решением - этот фактор необходим только этой функции и не имеет отношения к остальной части класса.
Это похоже на хороший способ пойти? Есть ли лучшие варианты? О чем я могу думать, особенно в отношении безопасности потоков.
Спасибо,
Dom
Возможно, нет необходимости блокировать длительную работу, просто найдите/вставьте вызовы на карту. –
Я думаю, что ты прав. Позвольте мне настроить его дальше. –
Создание статической карты при сохранении блокировки не гарантируется потокобезопасностью, поскольку вы можете дважды построить и дважды разрушить карту, если два потока одновременно вызовут эту функцию при первом использовании. См. Http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx – bk1e