在MSVC的并发运行时中parallel_for_each和parallel_for有什么区别?

时间:2011-12-14 03:41:46

标签: c++ concurrency multicore concurrent-programming visual-studio-2010

parallel_for_each具有以下形式:

Concurrency::parallel_for_each(start_iterator, end_iterator, function_object);

parallel_for也有类似的形式:

Concurrency::parallel_for(start_value, end_value, function_object);

那么在为多个内核编程时使用的Concurrency::parallel_forConcurrency::parallel_for_each算法有什么区别?

1 个答案:

答案 0 :(得分:7)

我不知道你在谈论什么库,但看起来这个就是迭代器:

Concurrency::parallel_for_each(start_iterator, end_iterator, function_object);

并且可能具有与此相同的效果(尽管不一定按照相同的顺序):

for(sometype i = start_iterator; i != end_iterator; ++i) {
    function_object(*i);
}

例如:

void do_stuff(int x) { /* ... */ }
vector<int> things;
// presumably calls do_stuff() for each thing in things
Concurrency::parallel_for_each(things.begin(), things.end(), do_stuff);

另一个获取值,因此很可能它具有类似的效果(但同样,没有保证的顺序):

for(sometype i = start_value; i != end_value; ++i) {
    function_object(i);
}

尝试运行:

void print_value(int value) {
    cout << value << endl;
}

int main() {
    // My guess is that this will print 0 ... 9 (not necessarily in order)
    Concurrency::parallel_for(0, 10, print_value);
    return 0;
}

编辑:您可以在Parallel Algorithm references中找到对这些行为的确认。