作者:wangtao | 2023-08-29 18:40
我有一个相对昂贵的数据获取操作,我想缓存结果.从const
方法调用此操作,大致如下:
double AdjustData(double d, int key) const {
double factor = LongRunningOperationToFetchFactor(key);
return factor * d;
}
我想AdjustData
保留const
,但我想缓存因素,所以我只是第一次获取它.目前我使用的是mutable map
存储的结果(图被key
到factor
),但我使用的功能范围的静态可能是一个更好的解决办法思考-这个因素只能通过此功能需要,而且是无关的其他同学.
这似乎是一个好方法吗?还有更好的选择吗?我可以考虑哪些事情,特别是在线程安全方面.
谢谢,
大教堂
1> Jeroen Dirks..:
我会用这样的东西包装LongRunningOperationToFetchFactor的实现.我正在使用Boost范围的锁,但你可以使用与其他锁定框架类似的东西.
#include
#include
#include
如果这确实是一个长期运行的操作,那么锁定互斥锁的成本应该是最小的.
你的问题不是很清楚,但如果函数LongRunningOperationToFetchFactor是你的类的成员函数,那么你希望map在同一个类中是可变映射.我单个静态互斥锁用于访问仍然足够快.