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

标签 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 算法有什么区别?

最佳答案

我不知道你在说什么库,但看起来这个库需要迭代器:

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 中找到对这些行为的确认。 .

关于c++ - MSVC 并发运行时中的 parallel_for_each 和 parallel_for 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8499245/

相关文章:

具有停止条件的 Java 生产者-消费者

c - 多核和多 CPU 环境中的 mmap 线程安全

c++ - 在 24 核 CPU 中增加线程数超过 4 会导致性能下降

c++ - 构建 C++ 模板类时未解析的外部

c++ - 有没有一种方法可以选择我想要分配的一个实例的哪些成员,而无需手动分配它们

java - ThreadPoolExecutor中的 "active threads"是什么意思?

go - 具有并发支持的golang哈希表

c++ - 如何构建 C++ 应用程序以使用多核处理器

c++ - FW1FontWrapper IFW1ColorRGBA

c++ - Arduino编程添加毫秒延迟