組み合わせ可能

[tls.combinable]

最終的な値にマージされる並列計算でスレッドローカル値を保持するクラス・テンプレート。

組み合わせ可能であるものは、各スレッドにタイプ T の固有にインスタンスを提供します。


// <oneapi/tbb/combinable.h> ヘッダーで定義  

namespace oneapi { 
namespace tbb { 
    template <typename T> class combinable { 
    public: 
        combinable(); 

        combinable(const combinable& other); 
        combinable(combinable&& other); 

        template <typename FInit> 
        explicit combinable(FInit finit); 

        ~combinable(); 

        combinable& operator=( const combinable& other); 
        combinable& operator=( combinable&& other); 

        void clear(); 

        T& local(); 
        T& local(bool & exists); 

        template<typename BinaryFunc> T combine(BinaryFunc f); 
        template<typename UnaryFunc> void combine_each(UnaryFunc f); 
    }; 
} // namespace tbb 
} // namespace oneapi

メンバー関数

combinable()

T のスレッド・ローカル・インデックスがデフォルトで組み合わせ可能なように構築されます。

template<typename FInit>
explicit combinable(FInit finit)

finit() の結果をコピーすることで、スレッドローカル要素が作成されるように組み合わせ可能な構造を構築します。

警告

finit() 式は、複数のスレッドで同時に評価しても安全でなければなりません。新しいスレッドローカル要素が作成されるたびに評価されます。

combinable(const combinable &other)

other のコピーを作成し、同じスレッドのマッピングを持つ other の各要素のコピーを保持します。

combinable(combinable &&other)

other の内容をそのまま移動して組み合わせ可能な構造を構築します。other は未指定の状態のままですが、安全に破棄できます。

~combinable()

*this のすべての要素を破棄します。

combinable &operator=(const combinable &other)

*thisother のコピーに設定します。*this への参照を返します。

combinable &operator=(combinable &&other)

other の内容をそのまま移動します。other は未指定の状態のままですが、安全に破棄できます。*this への参照を返します。

void clear()

*this から全ての要素を削除します。

T &local()

スレッドに要素が存在しない場合、要素を作成します。

戻り値: スレッドローカル要素への参照を返します。

T &local(bool &exists)

local() に似ていますが、要素がスレッドにすでに存在する場合 exists が true に設定され、それ以外は false に設定されます。

戻り値: スレッドローカル要素への参照を返します。

template<typename BinaryFunc>
T combine(BinaryFunc f)

要件: BinaryFunc タイプは、[function.objects] ISO C++ 標準の関数オブジェクトの要件を満たしている必要があります。タイプはシグネチャー T BinaryFunc(T,T) または T BinaryFunc(const T&,const T&) である必要があります。T タイプは、組み合わせ可能オブジェクトに対応するテンプレート・パラメーターと同一である必要があります。

効果: 二項関数 f を使用して要素のリダクション計算を行います。f の評価はすべて呼び出し元のスレッドで順番に行われます。要素が存在しない場合、新しい要素を作成する場合と同じ規則によって結果を作成します。

戻り値: リダクションの結果を返します。

template<typename UnaryFunc>
void combine_each(UnaryFunc f)

要件: UnaryFunc タイプは、[function.objects] ISO C++ 標準の関数オブジェクトの要件を満たしている必要があります。具体的には、タイプは次のいずれかのシグネチャーを持つ単項関数である必要があります。void UnaryFunc(T)void UnaryFunc(T&)、または void UnaryFunc(const T&) A Tタイプは、enumerable_thread_specific オブジェクトに対応するテンプレート・パラメーターと同一である必要があります。

効果: *this の各スレッドローカル要素 xf(x) を評価します。すべての評価は、呼び出し元のスレッドで順番に行われます。

class combinable メソッドは、スレッドを除いてスレッドセーフではありません。