在parallel_for中使用函数对象

时间:2010-12-13 17:37:25

标签: c++ visual-studio-2010 visual-c++ parallel-processing lambda

我几乎没有学会如何并行使用函数。下面的代码行计算索引的平方值,并将其放在该索引的数组(称为square)中。 parallel_for函数在Visual Studio 2010中可用,作为标题下的Concurrency命名空间的一部分。

parallel_for(static_cast<size_t>(0), count, 
    [&squares](size_t n) { squares[n] = (n+1)*(n+1); });

你可以看到它使用lambda表达式来并行计算平方,这段代码可以正常工作和编译。但是,lambda表达式将parallel_for函数与代码混为一谈。我只想在函数对象中定义lambda表达式,例如:

function<void(size_t)> Squares = 
    [&squares](size_t n) { squares[n] = (n+1)*(n+1); };

我的问题是如何在parallel_for函数中使用此函数(Squares)?我是否错误地编写了Squares函数,或者这只是parallel_for使用lambda表达式的范例?除了微软之外,您可以向我推荐一些其他并行库,但我仍然想知道我的问题的答案。

2 个答案:

答案 0 :(得分:3)

任何lambda表达式都可以被认为是相应函数对象的匿名版本。

在您的示例中,您的仿函数可以正常工作,如下所示:

parallel_for(static_cast<size_t>(0), count, Squares);

来自MSDN docs

  

lambda表达式是一种编程   与匿名相关的技术   功能。匿名函数是一个   具有身体的功能,但没有   有一个名字。一个lambda表达式   隐式定义一个函数对象   class并构造一个函数对象   该类型。

答案 1 :(得分:0)

MSFT的示例都直接使用Lambda。