concurrent_lru_cache テンプレート・クラス

概要

並列操作で使用するキャッシュの中で最も古いもの (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 では、これは古いクラスです。代わりに、ムーブ・セマンティクスを使用します。