并发:: combinable / c ++

时间:2011-12-18 16:35:04

标签: c++ concurrency parallel-processing factorial

这是计算任意数字的阶乘的代码:

unsigned long long factorial(int n)
{
  Concurrency::combinable<unsigned long long> products=Concurrency::combinable<unsigned long long>([]()->unsigned long long{return 1LL;});
  Concurrency::parallel_for(1, n+1, [&products](int i){products.local() *= i;});
  return products.combine([](unsigned long long lProduct, unsigned long long rProduct){ return lProduct*rProduct;  });
}
你可以向我解释一下:

    • ()->是什么意思?我认为()是一个算符,但是哪个类?为什么会有->
    • 什么是1LL

2 个答案:

答案 0 :(得分:2)

[]()->unsigned long long{return 1LL;}是一个匿名的lambda函数,返回unsigned long long。 LL后缀表示文字值为long long而不是int

答案 1 :(得分:1)

->unsigned long long声明lambda函数的返回类型。

您可以在C ++ lambda上谷歌获取更多信息,但基本语法类似于:

[capture_mode] (formal_parameters) mutable -> return_type {body}

1LLstatic_cast<long long>(1)基本相同。 1int1LLlong long

但是,编写它的更简单的方法是:

Concurrency::combinable([]{return 1ULL;});

应自动推断出哪些类型。请注意,我使用ULL而不是LL来使其成为无符号long long,就像在原始代码中一样。