combinable テンプレート・クラス

概要

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

構文

template<typename T> class combinable;

ヘッダー

#include "tbb/combinable.h"

説明

combinable<T> は、T 型の自身のインスタンスを各スレッドに提供します。

メンバー

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

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

        combinable(const combinable& other);
        // C++11 以降でサポート
        combinable(combinable&& other);

        ~combinable();

        combinable& operator=( const combinable& other);
        // C++11 よりも前でサポート
        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);
    };
}
次の表は、このテンプレート・クラスのメンバーの詳細な情報を提供します。
メンバー 説明
combinable()

T のスレッド・ローカル・インスタンスがデフォルト設定で作成される combinable を作成します。

template<typename FInit> explicit combinable(FInit finit)

スレッドローカル要素が finit() の結果をコピーして作成される combinable を作成します。

注意

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

combinable( const combinable& other );

other のコピーを作成します。同じスレッドマップで other の各要素のコピーが含まれます。

combinable( combinable&& other );

C++11 以降でサポート。other のコンテンツをそのまま移動することにより combinable を構築します。other は無指定の状態のままですが、安全に破棄することができます。

~combinable()

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

combinable& operator=( const combinable& other )

*thisother のコピーに設定します。

combinable& operator=( combinable&& other )

C++11 以降でサポート。other のコンテンツをそのまま *this に移動します。other は無指定の状態のままですが、安全に破棄することができます。

void clear()

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

T& local()

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

戻り値: スレッドローカル要素への参照。

T& local( bool& exists )

要素が現在のスレッドに存在していた場合は exists が true に設定され、存在していなかった場合は false に設定されることを除いて、local() に似ています。

戻り値: スレッドローカル要素への参照。

template<typename BinaryFunc>T combine(BinaryFunc f)

要件: f 引数は、署名 T(T,T) または T(const T&,const T&) の結合バイナリー・ファンクターでなければなりません。

効果: バイナリー・ファンクター f を使用してすべての要素のリダクションを計算します。f のすべての評価は、呼び出しスレッドでシーケンシャルに行われます。要素がない場合、新しい要素の作成と同じ規則を使用して結果を作成します。

戻り値: リダクションの結果。

template<typename UnaryFunc> void combine_each(UnaryFunc f)

要件: f 引数は、署名 void(T)void(T&) または void(const T&) の単項ファンクターでなければなりません。

効果: *this の各スレッドローカル要素 x について f(x) を評価します。すべての評価は、呼び出しスレッドでシーケンシャルに行われます。

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