私は結果をキャッシュしたい、比較的高価なデータフェッチ操作を持っています。キャッシュ高価なデータ - 変更可能なメンバ変数VS機能スコープ静
double AdjustData(double d, int key) const {
double factor = LongRunningOperationToFetchFactor(key);
return factor * d;
}
私はconst
を維持するAdjustData
のようにしたいが、私はそう私はそれを最初にフェッチ要因をキャッシュする:この操作は、おおよそ次のように、const
メソッドから呼び出されます。現在はを使用して結果を保存しています(マップはkey
からfactor
までです)。しかし、私は関数スコープの静的関数を使用する方が良い解決策であると考えています。この要素はこの関数でのみ必要です。クラスの残りの部分とは無関係です。
これは良い方法のようですか?より良い選択肢はありますか?特に糸安全性に関して、私はどのようなことを考えていますか?
おかげで、
ドム
長時間実行されている操作をロックする必要はなく、マップ上で呼び出しを検索/挿入するだけで済みます。 –
私はあなたが正しいと思います。私はさらにそれを調整してみましょう。 –
ロックを保持していない静的マップの作成は、スレッドセーフであることが保証されていません。なぜなら、2つのスレッドが初めてこの関数を同時に呼び出すと、マップを二重構築して二重構造にするからです。 http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx – bk1e