combinable 类
combinable<T>
对象旨在提供数据的线程专用副本,以在并行算法期间执行无锁线程本地子计算。 在并行操作结束时,线程专用子计算可随之合并到最终结果。 此类可替代共享变量使用,并可能会带来性能提升(如果该共享变量上存在大量争用)。
语法
template<typename T>
class combinable;
参数
T
最终合并结果的数据类型。 该类型必须具有复制构造函数和默认构造函数。
成员
公共构造函数
名称 | 描述 |
---|---|
combinable | 已重载。 构造新的 combinable 对象。 |
~combinable 析构函数 | 销毁 combinable 对象。 |
公共方法
名称 | 描述 |
---|---|
clear | 清除先前使用的任何中间计算结果。 |
combine | 通过调用提供的组合函子从线程局部子计算集中计算最终值。 |
combine_each | 通过对每个线程局部子计算调用一次提供的组合函子,从线程局部子计算集计算最终值。 最终结果由函数对象累加。 |
local | 已重载。 返回对线程专用子计算的引用。 |
公共运算符
“属性” | 描述 |
---|---|
operator= | 从另一个 combinable 对象分配给 combinable 对象。 |
备注
有关详细信息,请参阅并行容器和对象。
继承层次结构
combinable
要求
标头:ppl.h
命名空间: 并发
clear
清除先前使用的任何中间计算结果。
void clear();
combinable
构造新的 combinable
对象。
combinable();
template <typename _Function>
explicit combinable(_Function _FnInitialize);
combinable(const combinable& _Copy);
参数
_Function
初始化函子对象的类型。
_FnInitialize
将被调用以初始化 T
类型的每个新线程专用值的函数。 它必须支持带有 T ()
签名的函数调用运算符。
_Copy
要复制到此对象的现有 combinable
对象。
备注
第一个构造函数使用 T
类型的默认构造函数初始化新元素。
第二个构造函数使用作为 _FnInitialize
参数提供的初始化函子来初始化新元素。
第三个构造函数是复制构造函数。
~combinable
销毁 combinable
对象。
~combinable();
combine
通过调用提供的组合函子从线程局部子计算集中计算最终值。
template<typename _Function>
T combine(_Function _FnCombine) const;
参数
_Function
将被调用以组合两个线程局部子计算的函数对象的类型。
_FnCombine
用于组合子计算的函子。 它的签名是 T (T, T)
或 T (const T&, const T&)
,它必须是关联的和可交换的。
返回值
组合所有线程专用子计算的最终结果。
combine_each
通过对每个线程局部子计算调用一次提供的组合函子,从线程局部子计算集计算最终值。 最终结果由函数对象累加。
template<typename _Function>
void combine_each(_Function _FnCombine) const;
参数
_Function
将被调用以组合单个线程局部子计算的函数对象的类型。
_FnCombine
用于组合子计算的函子。 它的签名是 void (T)
或 void (const T&)
,它必须是关联的和可交换的。
local
返回对线程专用子计算的引用。
T& local();
T& local(bool& _Exists);
参数
_Exists
对布尔值的引用。 如果此线程上已存在子计算,则此参数引用的布尔值将设置为 true
,如果这是此线程上的第一个子计算,则设置为 false
。
返回值
对线程专用子计算的引用。
operator=
从另一个 combinable
对象分配给 combinable
对象。
combinable& operator= (const combinable& _Copy);
参数
_Copy
要复制到此对象的现有 combinable
对象。
返回值
对此 combinable
对象的引用。