並列操作で使用するキャッシュの中で最も古いもの (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 つの項目が格納されています。
複数のスレッドが同時にコンテナーからアイテムを取得することができます。
コンテナーは、実際の値の代わりに、アイテムを参照する concurrent_lru_cache::handle プロキシー・オブジェクトを返すことで、使用中のアイテムを追跡します。アイテムへの参照を保持する handle オブジェクトがなくなったら、アイテムは未使用と見なされます。
コンテナーは、現在使用中のすべてのアイテムに加えて、限られた数の未使用のアイテムを格納します。余分な未使用のアイテムは、最も古いものから削除されます。
キーに対応するアイテムが見つからない場合、コンテナーはユーザー定義の value_functor_type 関数オブジェクトを呼び出し、キーの値を構成して格納します。関数オブジェクトはスレッドセーフでなければなりません。
namespace tbb { template <typename key_type, typename value_type, typename value_functor_type = value_type (*)(key_type) > class concurrent_lru_cache{ public: class handle; concurrent_lru_cache(value_functor_type f, std::size_t number_of_lru_history_items); handle operator[](key_type k); private: struct handle_move_t; // C++11 よりも前でサポート }; }
メンバー | 説明 |
---|---|
concurrent_lru_cache(value_function_type f, std::size_t number_of_lru_history_items) | 関数オブジェクト f で新しい値を構成して、最大 number_of_lru_history_items の未使用の値を保持できる空のキャッシュを構築します。 |
handle operator[](key_type k) | 指定されたキーに対応するアイテムをコンテナーで検索します。アイテムが見つからない場合、ユーザー定義の関数オブジェクトが呼び出され、コンテナーに挿入される値が構成されます。 戻り値: 一致する値への参照を保持する handle オブジェクト。 |
~concurrent_lru_cache() | コンテナーが使用されないように、コンテナー内のすべてのアイテムとコンテナーを破棄します。 |
class handle | concurrent_lru_cache に格納されているアイテムへの参照を保持し、アクセスを提供するクラス。詳細 |
struct handle_move_t | クラス handle のインスタンス間で参照を転送する補助プライベート型。直接使用することはできません。C++11 では、これは古いクラスです。代わりに、ムーブ・セマンティクスを使用します。 |