並列操作で使用するキャッシュの中で最も古いもの (LRU キャッシュ) 用のテンプレート・クラス。
template <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) > class concurrent_lru_cache;
#define TBB_PREVIEW_CONCURRENT_LRU_CACHE 1 #include "tbb/concurrent_lru_cache.h"
concurrent_lru_cache コンテナーは、格納されている未使用のオブジェクト数を制限できるようにするキーを値に割り当てます。コンテナーには、キーごとに最大 1 つの要素があります。
複数のスレッドが同時にコンテナーからアイテムを取得することができます。
コンテナーは、実際の値の代わりにプロキシー・オブジェクトを返すことで、取得されたアイテムの存続期間を追跡します。
コンテナーは、現在使用中のすべてのアイテムと限られた数の未使用のアイテムを格納します。余分なアイテムは、最も古いものから削除されます。
キーに対応するアイテムが見つからない場合、コンテナーはユーザー定義の関数オブジェクトを呼び出し、必要な値を取得して挿入します。関数オブジェクトはスレッドセーフでなければなりません。
namespace tbb { template <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) > class concurrent_lru_cache{ private: class handle_object; public: typedef handle_object handle; public: concurrent_lru_cache(value_functor_type f,std::size_t number_of_lru_history_items); handle_object operator()(key_type k); private: struct handle_move_t; class handle_object { public: handle_object(handle_move_t m); operator handle_move_t(); value_type& value(); ~handle_object(); friend handle_move_t move(handle_object& h); private: void operator=(handle_object&); handle_object(handle_object &); }; }; }
メンバー | 説明 |
---|---|
concurrent_lru_cache(value_function_type f,std::size_t number_of_lru_history_items); |
格納される未使用オブジェクトの最大数である number_of_lru_history_items と、新しい値を返す f 関数オブジェクトを指定して空のキャッシュを構築します。 |
handle_object operator[](key_type k) |
指定されたキーのペアでコンテナーを検索します。ペアが見つからない場合、値を取得しコンテナーに挿入するため、ユーザー定義の関数オブジェクトが呼び出されます。 戻り値: 一致する値を指す handle_object 。 |
~ concurrent_lru_cache() |
コンテナーが使用されないように、コンテナー内のすべてのアイテムとコンテナーを破棄します。 |
handle_object クラス | 詳細 |
handle_move_t class |
handle_object オブジェクトのインスタンス間で所有権の譲渡を許可する、特定の変換を可能にするための補助クラスです。handle_object オブジェクトを関数に渡したり、関数から返すこともできるようにします。このクラスにはメンバーはありません。LRU キャッシュコンテナーの値オブジェクトへの参照とコンテナー自体へのポインターのみ保持します。 |