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 对象的引用。

另请参阅

并发命名空间