組み合わせ可能
[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)
*this
を other のコピーに設定します。*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&)
AT
タイプは、enumerable_thread_specific
オブジェクトに対応するテンプレート・パラメーターと同一である必要があります。効果:
*this
の各スレッドローカル要素 x の f(x) を評価します。すべての評価は、呼び出し元のスレッドで順番に行われます。
注
class combinable
メソッドは、スレッドを除いてスレッドセーフではありません。